【发布时间】:2012-04-06 03:26:20
【问题描述】:
我想了解为什么会发生以下情况。我的猜测是在列表迭代期间正在创建一个临时的,但希望一些专家确认这一点:
def test():
a=[set([1,2,3]),set([3,4,5])]
x=set([1,4])
for i in a:
# doesn't actually modify list contents, making a copy of list elements in i?
i=i.difference(x)
print a
for idx,i in enumerate(a):
i=i.difference(x)
print id(i),id(a[idx])
# obviously this modifies the contents
a[idx]=i
print a
输出:
[set([1, 2, 3]), set([3, 4, 5])]
59672976 59672616
59672616 59672736
[set([2, 3]), set([3, 5])]
另外,我想了解为什么第二次迭代中 i 的“id”与 a[0] 的“id”相同。
【问题讨论】:
-
@Series8217 我已经看过这个,但更多的是在迭代时修改实际序列本身,而我正在谈论修改序列的内容。不过还是谢谢。