我最近参加了一次大学考试,有人问我这个程序的输出是什么:
def fun(x):
y=x
x.append(4)
print(str(x)+" "+str(y))
fun(["one","two",3,5.0])
我回答说 y 列表将是 ["one","two", 3,5.0]
并且在将 4 附加到它之后,x 列表将是相同的但是有一个4 在它的末尾。令我惊讶的是,当我打印两个列表时,它们是相等的,即使 x 列表更新是在两个列表之间建立相等性之后执行的。为什么会这样?
谢谢
最佳答案
如果列出 x 到 y,您已经给出了引用。因此列表 x 中的任何更改也会影响列表 y。
y=x
例如:
>>> x = ["one","two",3,5.0]
>>> y = x
>>> x[3] = 4
>>> x
['one', 'two', 3, 4]
>>> y
['one', 'two', 3, 4]
这里 x 和 y 具有相同的标识。
>>> x is y
True
>>> id(x)
3073118540L
>>> id(y)
3073118540L
您可以使用 swampy 更好地理解这一点模块:
>>> from swampy.Lumpy import Lumpy
>>> lump = Lumpy()
>>> x = ["one","two",3,5.0]
>>> y = x
>>> x[3] = 4
>>> lump.object_diagram()
可以通过将列表 x 复制到列表 y 来实现您所期望的,如下所示:
>>> x = ["one","two",3,5.0]
>>> y = x[:]
>>> x.pop()
5.0
>>> x
['one', 'two', 3]
>>> y
['one', 'two', 3, 5.0]
因此,通过将内容从 x 复制到 y,它们不具有相同的身份:
>>> id(x)
3073240428L
>>> id(y)
3073240588L
>>> x is y
False
使用沼泽:
>>> from swampy.Lumpy import Lumpy
>>> lump = Lumpy()
>>> x = ["one","two",3,5.0]
>>> y = x[:]
>>> lump.draw_object()
>>> lump.object_diagram()
要获得更好的解释,请访问此处 How do I copy an object in Python?
关于python - 相等字符串自动更新(列表对象引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738632/