【问题标题】:Variable assignment and manipulation in Python [duplicate]Python中的变量赋值和操作[重复]
【发布时间】:2016-02-03 06:36:46
【问题描述】:

我对下面 Python 代码的结果差异感到很困惑。为什么在第一种情况下,“a”不会随着“b”的变化而变化,而在第二种情况下呢?

a=b=[]
b = [1,2,3]
print b,a
########## compare with below ################################
a=b=[]
b.append([1,2,3])
print b,a

第一部分的结果是: [1,2,3] [ ] 第二部分的结果是: [[1,2,3]] [[1,2,3]]

有人建议这是一个重复的问题,但我认为我在这里用两种不同的方式更改列表“b”,我想它可以显示这两种变量操作方法可能有何不同。

【问题讨论】:

  • 在第一部分中,您将 b 指向一个新的、不同的列表。在第二个中,a 和 b 都指向同一个列表。

标签: python variable-assignment


【解决方案1】:

因为=append不同。

当您执行b = [1, 2, 3] 时,您为b 分配了一个新值。这不以任何方式涉及b 的旧值;无论b 之前持有什么值,您都可以这样做。

当您执行b.append(...) 时,您修改作为b 现有值的对象。如果该对象也是其他名称的值(在本例中为a),那么这些名称也将“看到”更改。请注意,与赋值不同,这些类型的操作取决于您拥有的值类型。你可以做b.append(...) 因为b 是一个列表。如果b 是一个整数,那么你不能使用b.append,但你仍然可以使用b = [1, 2, 3]

【讨论】:

    【解决方案2】:

    在第一个示例中,您正在重新分配变量b,现在它指向另一个列表。

    a = b = [] # a -> [] <- b
    b = [1, 2, 3] # a -> [], b -> [1, 2, 3]
    

    在第二个示例中,ab 变量都指向同一个列表,并且您在列表中插入值:

    a = b = [] # a -> [] <- b
    b.append([1, 2, 3]) # a -> [[1, 2, 3]] <- b
    

    【讨论】:

      【解决方案3】:

      要详细说明其他答案,这直接来自Python docs

      list.append(x)
          Add an item to the end of the list; equivalent to a[len(a):] = [x].
      

      看着:

      a[len(a):] = [x]
      

      很容易看出,使用 append 正在修改原始列表(python 示例代码中的a,在您的情况下为b)。

      正如其他人指出的那样,使用赋值语句是为b 分配一个新值,而不是通过append 修改它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 2011-03-21
        • 2015-03-21
        • 2017-12-18
        • 2011-10-11
        • 2014-05-06
        相关资源
        最近更新 更多