【问题标题】:Python list pop method and keep a copy of the original list [duplicate]Python列表弹出方法并保留原始列表的副本[重复]
【发布时间】:2020-12-04 05:31:32
【问题描述】:

我不太理解这种行为,但是为什么在python3list.pop() 方法会从列表中删除对象以及复制的列表,如果我想将副本作为参考怎么办。 MWE:

>>> a =['1','2','3']
>>> a
['1', '2', '3']
>>> b=a
>>> b.pop(0)
'1'
>>> b
['2', '3']
>>> a
['2', '3']

【问题讨论】:

  • b=a 传递参考。要获取新列表,请使用 b=a.copy()

标签: python list python-3.6


【解决方案1】:

列表ab 的赋值不做拷贝;它们仍然指向同一个底层列表对象。

如果您想制作列表的完整副本,您可以使用切片表示法来复制完整列表:

>>> a =['1','2','3']
>>> b = a[:]
>>> b.pop(0)
'1'
>>> b
['2', '3']
>>> a
['1','2','3']

或者更一般地说,参见copy 模块

【讨论】:

  • 有趣。然而,当我们修改原始列表时,这种行为不会发生,比如a+1。它与pop() 相关还是一般的 Python 行为?
  • @Amir:当您修改原始(仅)列表时,通常会发生这种行为确实a+1 对列表无效,但任何实际修改都会通过这两个变量显示。
  • 这是可变对象的一般 Python 行为——如果你要修改原始列表,也会发生同样的情况,比如a.append('4')。字符串和整数是不可变的,因此不会表现出相同的行为
猜你喜欢
  • 1970-01-01
  • 2019-03-27
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2010-09-18
相关资源
最近更新 更多