代码之家  ›  专栏  ›  技术社区  ›  Estif

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

  •  2
  • Estif  · 技术社区  · 4 年前

    像这样做

    a = b = 5
    
    a
    Out[63]: 5
    
    b
    Out[64]: 5
    

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

    4 回复  |  直到 4 年前
        1
  •  3
  •   Carcigenicate    4 年前

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

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

    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]
    

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

        2
  •  1
  •   Mark Ransom    4 年前

    相同的对象 . 在您的例子中,这并不重要,但在某些情况下它会起作用。

    a = b = []
    a.append(1)
    print(b)
    
        3
  •  0
  •   Aven Desta    4 年前

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

    a = b = [2,3]
    

    现在这实际上在内存中创建了一个对象,并且两个都创建了 a b 分享吧。 ,它将在 b类

    >> a[1] = 0
    >> print(b)
    [2,0]
    
        4
  •  -2
  •   Mehammed Teshome    4 年前

    是的,你可以。这叫做多重指派