在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}')
这是否意味着新列表是在第一个列表发生突变后创建的?
答案 0 :(得分:1)
x.copy()
复制x
,然后将其分配给y
。 x
和y
现在是完全不同的变量,它们指向计算机内存的不同部分,但是它们指向的内容是相同的。
我认为您的困惑源于您在进行x==y
的相等性检查。这会根据x
的内容检查y
的内容,如果它们相等,则返回true。但是,并没有说它们是相同的变量。尝试使用此表达式x is y
,它将返回False
或id(x) == id(y)
,因为两个变量指向内存中的不同位置,它们也将返回False
。
也就是说,当然,当您将x
的内容复制到y
后进行更改时,y
不会受到影响。