变量列表在python中自动更新

Dav*_*usa 2 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]
Run Code Online (Sandbox Code Playgroud)

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

[['a', 't'], ['a', 't'], ['t', 'a']]
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*eld 5

两个问题:

  1. list.reverse方法就地修改列表并且不返回任何内容(即返回None).您可能想要使用该reversed方法.
  2. bra列表中的前两个元素都引用相同的底层对象.因此,当您修改该对象时,前两个元素都会再次引用相同的修改对象,因此您可以看到['t', 'a']前两个元素的原因.

如果要使用单独的对象而不是对同一对象的引用,可以使用切片运算符进行复制:

bra.append(put[:])  # Appends a copy of 'put'
Run Code Online (Sandbox Code Playgroud)

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

bra.append(put[::-1])  # Equivalent to bra.append(reversed(put))
Run Code Online (Sandbox Code Playgroud)