gpt4 book ai didi

python - 相等字符串自动更新(列表对象引用)

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:27 24 4
gpt4 key购买 nike

我最近参加了一次大学考试,有人问我这个程序的输出是什么:

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()

enter image description here


可以通过将列表 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()

enter image description here

要获得更好的解释,请访问此处 How do I copy an object in Python?

关于python - 相等字符串自动更新(列表对象引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com