为什么在 Python 中更改列表 ‚y‘ 也会更改列表 ‚x‘?

为什么在 Python 中更改列表 ‚y‘ 也会更改列表 ‚x‘?

阅读更多:Python 教程

示例

本文将讨论如果更改列表,比如列表 y,会不会也更改列表 x。为此,让我们先看一个使用两个列表进行 append() 和打印的示例 ‚àí

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 时,我们不是通过增加其值来改变 int 5 的值。相反,我们正在创建一个新对象(int 6),并将其分配给 x。这样,在此分配后,我们有两个对象(int 6 和 5)以及两个引用它们的变量。

因此,

  • 可变对象 ‚àí 如果我们有一个可变对象,比如列表、字典、集合等,我们可以使用一些特定的操作来改变它,引用它的所有变量也会看到这种改变。

  • 不可变对象 ‚àí 如果我们有一个不可变对象,比如字符串、整数、元组等,则引用它的所有变量始终看到相同的值,但将该值转换为新值的操作始终返回一个新对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程