为什么在 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)和两个变量引用它们。
因此,
可变对象 - 如果我们有一个可变对象,例如列表、字典、集合等,我们可以使用一些特定的操作来改变它,并且所有引用它的变量都将看到更改。
不可变对象 - 如果我们有一个不可变对象,例如字符串、整数、元组等,所有引用它的变量都将始终看到相同的值,但是将该值转换为新值的运算始终返回一个新对象。
广告