【发布时间】:2012-02-18 07:59:19
【问题描述】:
我以为我已经弄清楚了整个列表别名,但后来我遇到了这个:
l = [1, 2, 3, 4]
for i in l:
i = 0
print(l)
导致:
[1, 2, 3, 4]
到目前为止一切顺利。
但是,当我尝试这样做时:
l = [[1, 2], [3, 4], [5, 6]]
for i in l:
i[0] = 0
我明白了
[[0, 2], [0, 4], [0, 5]]
这是为什么?
这与混叠的深度有关吗?
【问题讨论】:
-
python中没有“别名”之类的东西
-
@user102008:如果我定义一个函数
f,然后将某个变量设置为等于f(即x = f)。然后我可以使用x()调用f。这对我来说听起来确实像是别名。如果我理解正确,使用赋值x = f使x引用f,它不会创建f 的实例? -
正确。
f是在def时间创建的。x = f只是将另一个名字指向 f。 -
但这不是别名,这只是复制参考。事后重新绑定
f不会影响x。 -
奇怪的是,“又一个”通常是伪装成“同一个”。
标签: python