Python整数不可变,但列表是.
在第一种情况下,el引用不可变整数,so =创建一个只有el引用的新整数.
在第二种情况下,列表a直接突变,直接修改其元素. a [0]仍然引用一个不可变的整数,so =创建一个新的整数,但是它的引用被直接分配给可变列表的一个元素.
例子
以下是显示列表元素的参考ID的示例.在第一种情况下,创建新的整数,但原始列表引用不变.
a = [1,2,3]
print [id(x) for x in a]
print a
for el in a:
el += 5 # creates new integer, but only temp name references it
print [id(x) for x in a] # references are not changed.
print a
产量
[36615248, 36615236, 36615224]
[1, 2, 3]
[36615248, 36615236, 36615224]
[1, 2, 3]
在第二种情况下,更新列表引用:
a = [1,2,3]
print [id(x) for x in a]
print a
for i in range(len(a)):
a[i] += 5 # creates new integer, but updates mutable list
print [id(x) for x in a] # references are changed.
print a
产量
[36615248, 36615236, 36615224]
[1, 2, 3]
[36615188, 36615176, 36615164]
[6, 7, 8]