在python 3.4中查看我的代码。我可以解决它。它让我有点烦恼。我猜这与foo2重置a而不是将其作为列表1处理有关。
def foo1(a):
a.append(3) ### add element 3 to end of list
return()
def foo2(a):
a=a+[3] #### add element 3 to end of list
return()
list1=[1,2]
foo1(list1)
print(list1) ### shows [1,2,3]
list1=[1,2]
foo2(list1)
print(list1) #### shows [1,2]
答案 0 :(得分:1)
在foo2
中,您不会改变a引用的原始列表 - 而是从list1
和[3]
创建新列表,并绑定结果,这是一个新列表到本地名称a
。所以list1
根本没有改变。
答案 1 :(得分:1)
追加与+ =
之间存在差异>>> a = []
>>> id(a)
11814312
>>> a.append("hello")
>>> id(a)
11814312
>>> b = []
>>> id(b)
11828720
>>> c = b + ["hello"]
>>> id(c)
11833752
>>> b += ["hello"]
>>> id(b)
11828720
如您所见,追加和+ =具有相同的结果;他们将项目添加到列表中,而不生成新列表。使用+添加两个列表并生成一个新列表。
答案 2 :(得分:0)
在第一个示例中,您使用的是一种可以就地修改a
的方法。在第二个示例中,您创建了一个新的a
来替换旧的a
,但没有修改旧的a
- 这通常是在您使用=
时发生的情况分配一个新值。一个例外是当您在左侧使用切片表示法时:a[:] = a + [3]
将像您的第一个示例一样工作。