Python中的list.copy()返回相同的引用?

时间:2019-12-12 17:06:46

标签: python python-3.x

在Python 3中,我有以下代码:

x = [1, 2, 3, 4]
y = x.copy()
print(f'{x == y}')

有趣的是,x == y的评估为True

但是,一旦x之后的x.copy()突变开始,x == y就变成False

x = [1, 2, 3, 4]
y = x.copy()
x[2] = 1000
print(f'{x == y}')

这是否意味着新列表是在第一个列表发生突变后创建的?

1 个答案:

答案 0 :(得分:1)

x.copy()复制x,然后将其分配给yxy现在是完全不同的变量,它们指向计算机内存的不同部分,但是它们指向的内容是相同的。

我认为您的困惑源于您在进行x==y的相等性检查。这会根据x内容检查y内容,如果它们相等,则返回true。但是,并没有说它们是相同的变量。尝试使用此表达式x is y,它将返回Falseid(x) == id(y),因为两个变量指向内存中的不同位置,它们也将返回False

也就是说,当然,当您将x的内容复制到y后进行更改时,y不会受到影响。