用多个等号同时声明两个变量是pythonic吗?

用多个等号同时声明两个变量是pythonic吗?,python,Python,像这样做 a = b = 5 a Out[63]: 5 b Out[64]: 5 它似乎工作没有任何问题,我无法想象有任何缺点。我找不到这方面的任何例子,也找不到是否应该使用它的说明。有理由不这样做吗?使用此代码,您不会遇到任何问题,因为您正在分配一个数字,而且数字是不可变的 将其与使用可变值时进行比较: a = b = [] # Mutable list a.append(1) # Mutate mutable list print(a, b) # [1] [1] # Oops

像这样做

a = b = 5

a
Out[63]: 5

b
Out[64]: 5

它似乎工作没有任何问题,我无法想象有任何缺点。我找不到这方面的任何例子,也找不到是否应该使用它的说明。有理由不这样做吗?

使用此代码,您不会遇到任何问题,因为您正在分配一个数字,而且数字是不可变的

将其与使用可变值时进行比较:

a = b = []  # Mutable list
a.append(1)  # Mutate mutable list
print(a, b)  # [1] [1]  # Oops
所以,小心点。仅当引用同一对象的两个变量没有问题时才使用它


我要澄清的是,问题不在于对象是可变的,而在于作为可变对象,它能够发生变异,而变异是有问题的。如果您“将列表视为不可变的”,则使用这种方式是完全正确的:


尽管如此,如果使用这样的列表,最好使用元组或其他不可变对象。

正如@juanpa.arrivillaga在评论中指出的那样,这会导致两个变量共享同一个对象。在您的示例中,这并不重要,但在某些情况下它会起作用

a = b = []
a.append(1)
print(b)

这取决于,如果它是一个简单的整数赋值,那么它就工作了。 但这对其他人来说是失败的。假设您实例化了一个列表

a=b=[2,3]
现在这实际上在内存中创建了一个对象,
a
b
都共享这个对象。 因此,如果更改
a
的值,它将反映在
b
上。这不是你想要的。所以最好坚持每行一个作业

>a[1]=0
>>印刷品(b)
[2,0]
它在语义上不同于两个单独的赋值语句。这意味着这些变量引用的是同一个对象
a = b = []
a.append(1)
print(b)