为什么在 Python 中更改列表 ‘y’ 也更改了列表 ‘x’?


示例

在这篇文章中,我们将看到,如果你更改一个列表,比如列表 y,列表 x 是否也会发生改变。为此,让我们首先来看一个包含两个列表的示例,并尝试使用 append() 方法和 print 函数:

x = [] y = x print("Value of y = ",y) print("Value of x = ",x) y.append(25) print("\nAfter changing...") print("Value of y = ",y) print("Value of x = ",x)

输出

('Value of y = ', [])
('Value of x = ', [])

After changing...
('Value of y = ', [25])
('Value of x = ', [25])

上面,我们看到更新列表 y 也改变了列表 x。

我们看到上述结果是因为:

  • 列表是可变的,即你可以更改它们的内容。
  • 变量是引用对象的名称。

上面,编写 y = x 不会创建列表的副本。它创建了一个新的变量 y,它引用了与 x 引用的相同的对象。这意味着只有一个对象,即列表,x 和 y 都引用它。

当调用 append() 时,可变对象的内容从 [] 变为 [25]。由于两个变量都引用同一个对象,因此使用任一名称都可以访问修改后的值 [25]。

假设我们改为将不可变对象赋值给 x,则 x 和 y 将不再相等。这是因为整数是不可变的:

示例

# ints are immutable x = 5 y = x print("Value of y = ",y) print("Value of x = ",x) # We are creating a new object x = x + 1 print("\nAfter changing...") print("Value of y = ",y) print("Value of x = ",x)

输出

('Value of y = ', 5)
('Value of x = ', 5)

After changing...
('Value of y = ', 5)
('Value of x = ', 6)

当我们编写 x = x + 1 时,我们不是通过增加其值来改变整数 5。相反,我们创建了一个新的对象(整数 6)并将其赋值给 x。赋值后,我们有两个对象(整数 6 和 5)和两个变量引用它们。

因此,

  • 可变对象 - 如果我们有一个可变对象,例如列表、字典、集合等,我们可以使用一些特定的操作来改变它,并且所有引用它的变量都将看到更改。

  • 不可变对象 - 如果我们有一个不可变对象,例如字符串、整数、元组等,所有引用它的变量都将始终看到相同的值,但是将该值转换为新值的运算始终返回一个新对象。

更新于:2022年9月19日

168 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告