变量列表在python中自动更新

时间:2012-11-08 20:52:09

标签: python list

我玩python 2.7。这是我的问题:

>>> bra=[]
>>> put=['a','t']
>>> bra.append(put)
>>> bra
[['a', 't']]
>>> bra.append(put)
>>> bra
[['a', 't'], ['a', 't']]
>>> bra.append(put.reverse())
>>> bra
[['t', 'a'], ['t', 'a'], None]

我的问题是:为什么de python解释器会在最后一行给出结果,而不是:

[['a', 't'], ['a', 't'], ['t', 'a']]

或我怎样才能得到这个结果?

1 个答案:

答案 0 :(得分:5)

两个问题:

  1. list.reverse方法就地修改列表并且不返回任何内容(即返回None)。您可能希望改为使用reversed方法。
  2. bra列表中的前两个元素都指向相同的基础对象。因此,当您修改该对象时,前两个元素都会再次引用相同的修改对象,这就是为什么您会看到前两个元素的['t', 'a']
  3. 如果要使用单独的对象而不是对同一对象的引用,可以使用切片运算符进行复制:

    bra.append(put[:])  # Appends a copy of 'put'
    

    作为reversed方法的替代方法,您还可以使用切片运算符,步长为-1来反转可迭代,但对于某些人来说,代码正在做的事情并不明显:

    bra.append(put[::-1])  # Equivalent to bra.append(reversed(put))