用多个等号同时声明两个变量是蟒蛇行为吗

  • 本文关键字:变量 两个 声明 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 = []
# Some other code
a = [1]  # Maybe these are conditional reassignments in a loop or something
b = [2]
print(a, b)  # [1] [2]

不过,如果您使用这样的列表,那么最好使用元组或其他不可变对象。

@juanpa.arrivilaga在评论中指出,这导致两个变量共享同一对象。在您的示例中,这并不重要,但在某些情况下会重要。

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

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

a = b = [2,3]

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

>> a[1] = 0
>> print(b)
[2,0]

最新更新