【发布时间】: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] < 0 else list。这将防止您陷入+=陷阱。 OTOH,如果您打算修改传入列表,那么看起来您正在获得您想要的行为。