python-3.x 为什么列表,字典和元组在一行声明时被取值,反之亦然?

dtcbnfnu  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(140)

当我在python中处理列表,字典和元组时,我感觉很奇怪。
当我们在一行中声明多个变量时,比如a = b = c = 0,它的行为就像单独的变量一样。
如果我们更新上述任何变量的值,那么它不会影响下面的另一个变量。

a = 10
b = 11
c = 13

但是,这个东西不适用于list,tuple和dictionary。如果我们像下面这样声明空白列表。

a = b = c = []

现在,我只向a列表添加一个值。

a.append('Testing')

现在,bc被自动赋予该值。
这种情况也发生在dictionary和tuple上。
我想知道为什么像上面的例子那样声明它是不被接受的。

wgx48brx

wgx48brx1#

这是可变对象和不可变对象的概念。当你写一个像a = b = c = []这样的代码时,所有的变量都引用同一个对象。如果这个对象是可变的,当你从任何一个变量中改变对象时,其他两个变量也会反映出变化。有些对象类型是可变的,有些则不是。
你可以阅读下面的文章,以获得更完整的答案。
https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747

mzmfm0qo

mzmfm0qo2#

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

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

现在,因为你已经声明为不同的变量,改变一个变量的值不会影响另一个变量的值。如果你想最小化编写代码(或行数),你可以这样写。

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

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

相关问题