x = [1,2]
for i in range(4):
y = x[:]
print id(y)
结果如下:
4392626008 4392835408 4392626008 4392835408
我的目的是每次复制x并使用新容器执行某些操作。我的python是version 2.7.5
,操作系统是Mac OS X 10.9
,这有关系吗?
答案 0 :(得分:4)
您永远不会发生y
的所有事件 - 您只是在循环中将名称y
重新绑定到x
的副本,所以在循环的后期 - Python可能会选择为新切片重新分配相同的内存区域。由于CPython中的id
返回内存地址,因此可能会得到相同的内容......
for i in range(4):
# Rebinding `y` inside the loop - making the object available for garbage collection
y = x[:]
print id(y)
如果您要保留所有y
,那么您将在CPython中获得唯一的id
:
>>> x = [1, 2]
>>> ys = [x[:] for _ in range(4)]
>>> map(id, ys)
[40286328, 40287568, 40287688, 40287848]