为什么列表、字典和元组在一行中声明时会取相反的值?

问题描述 投票:0回答:2

当我在Python中处理列表、字典和元组时,我感觉很奇怪。

当我们像

a = b = c = 0
一样在一行中声明多个变量时,它的行为就像单独的变量。

如果我们更新上述任何变量的值,那么它不会影响如下所示的另一个变量。

a = 10
b = 11
c = 13

但是,这个东西不适用于列表、元组和字典。如果我们像下面这样声明空白列表。

a = b = c = []

现在,我仅将一个值附加到

a
列表中。

a.append('Testing')

现在,

b
c
会自动分配该值。

这件事也会发生在字典和元组上。

我必须知道为什么不接受像上面的例子那样声明它。

python python-3.x immutability
2个回答
1
投票

这是可变对象和不可变对象的概念。当您编写像

a = b = c = []
这样的代码时,所有变量都引用同一个对象。如果该对象是可变的,则当您从任何变量更改该对象时,其他两个变量也会反映该更改。有些对象类型是可变的,有些则不是。

您可以阅读以下文章以获得更完整的答案。

https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747


0
投票

让我们考虑 3 个初始值相同的变量。但你知道这 3 个变量的值在程序的后面部分会有所不同。这意味着很明显这三个变量只是3个不同的变量。所以你应该像这样声明三个不同的变量:

a = []
b = []
c = []

现在,由于您已声明为不同的变量,因此一个变量中值的更改不会影响另一个变量的值。如果您想尽量减少编写代码(或行数),可以按如下方式编写。

a, b, c = [], [], []

通过编写 a = b = c= [ ],您不仅仅是声明变量。相反,您提到了一个条件(与提到公式相同)。也就是说,你坚持让 python 记住 a、b 和 c 的值在整个程序中是相同的。因此,这些变量中任何一个变量值的任何变化也会影响其他变量。

© www.soinside.com 2019 - 2024. All rights reserved.