【问题标题】:Why is there a difference between a = a + b and a += b [duplicate]为什么a = a + b和a + = b之间有区别[重复]
【发布时间】:2015-06-17 18:21:11
【问题描述】:

我刚刚遇到了这个错误:

def fn_that_uses_a_list(list):
  if (list[-1] < 0): list += [0]
  for item in list:
    print(item)

l = [-4, -2]
fn_that_uses_a_list(l)
# Now suddenly l has three items.

但是,如果我将 list += [0] 更改为 list = list + [0],那么一切正常。我觉得这很令人困惑,但这可能是因为我是 Python 新手。

为什么在这种情况下会有所不同?我正在寻找一个更有存在感的答案,而不是“list 是一个参考,所以+= 修改了原始答案”

我是不是在做一些“非pythonic”的事情导致我遇到错误?

【问题讨论】:

  • 您的预期行为是什么?难道你不想 list 在函数之后有三个项目吗?
  • 怎么了!!
  • @syntonym 不。我在函数期间暂时需要一个包含三个项目的列表。调用函数后我仍然需要原始列表保持不变...
  • 嗯,使用list 作为变量名开始有点不合 Python。但是,如果您的intent 是创建一个新列表,那么我会在您的代码中为该新列表使用一个新变量名:my_new_list = list + [0] if list[-1] &lt; 0 else list。这将防止您陷入+= 陷阱。 OTOH,如果您打算修改传入列表,那么看起来您正在获得您想要的行为。

标签: python list operators


【解决方案1】:

不确定你在追求什么,如果我同时使用 list += [0]list = list + [0] 我会得到相同的结果。

也就是说,+= 改变了列表,而 + 创建了一个新列表。试试:

def fn_that_uses_a_list(list):
  if (list[-1] < 0):
    print id(list)
    list += [0]
    # list = list + [0]
    print id(list)
  for item in list:
    print(item)

l = [-4, -2]
fn_that_uses_a_list(l)

【讨论】:

  • 我认为意图不是prints 打印不同的东西,而是列表发生了变化。
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 2018-06-27
  • 1970-01-01
  • 2014-12-05
  • 2017-04-06
  • 1970-01-01
  • 2019-12-18
  • 2012-07-03
相关资源
最近更新 更多