-1

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

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

有趣的是,评估x == yTrue

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

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

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

4

1 回答 1

1

x.copy()制作一个副本,x然后分配给y. xy现在是完全不同的变量,指向计算机内存的不同部分,但它们指向的内容是相同的。

我认为你的困惑源于你正在做的平等检查x==y。这将检查 的内容x内容y如果它们相等,则返回 true。但是,它并没有说它们是相同的变量。试试这个表达式x is y,它会返回False或者id(x) == id(y)which 也将返回False,因为这两个变量指向内存中的不同位置。

就是说,当然当你x把它的内容复制到后更改时yy不会受到影响。

于 2019-12-12T17:20:01.773 回答