【问题标题】:Unexpected result while executing list.pop()?执行 list.pop() 时出现意外结果?
【发布时间】:2018-07-18 14:00:32
【问题描述】:

我正在尝试分配 a = x 和 b = x.pop();尽管我得到了意想不到的任务。你能解释一下吗?

>>> x = [10, 11, 12, 13]
>>> a, b = x, x.pop(2)
>>> print a
[10, 11, 13] # Shouldn't I get a = [10, 11, 12, 13]?
>>> print b
12

【问题讨论】:

  • x 是可变的。 a = xx 发生了变化,因此 a 也发生了变化,因为它们指向同一个东西。
  • 这是正确的结果
  • @StephenRauch 我是 python 的初学者。我不知道可变和不可变对象。另一个提问者似乎已经知道了

标签: python python-3.x python-2.7 variable-assignment


【解决方案1】:

由于您指的是直接列表,因此它会弹出并分配什么 留在列表中。如果您有列表作为副本,请尝试以下操作:-

x = [10, 11, 12, 13]
a,b = x.copy(),x.pop(2)
print(a) # your expected output

【讨论】:

  • 序列可以通过切片而不是x.copy()来复制,所以可以通过x[:]来完成。 Python 常见问题解答 [docs.python.org/3/faq/…
  • @Matt.St 同意
【解决方案2】:

当你说 a=x 时,ax 都指向同一个列表,因此修改 a em> 也会修改 x。如果你说 a=list(x) 那么 a 将是列表 x 的单独副本。

【讨论】:

    【解决方案3】:

    你会得到 a = [10,11,13], b = 12。

    执行 'b = x.pop()' 后会弹出 x 的值,并且 x 永远更改,即执行 value 'b' 后程序的其余部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 2015-05-30
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      相关资源
      最近更新 更多