我正在尝试使用Python术语来解释为什么发生以下情况,有人可以解释为什么tmp
变成[[1,2,3]]
而不是[[1,2]]
的原因吗?
arr = []
tmp = [1,2]
arr.append(tmp)
print arr # [[1,2]]
tmp.append(3)
print arr # [[1,2,3]]
答案 0 :(得分:1)
所有评论都很棒。
arr.append(tmp)
print arr # [[1,2]]
如您所见,结果不是:
print arr # [1,2]
因此,arr
仅保留对tmp
数组的引用。如果我的猜测是写您正在寻找:
arr.extend(tmp)
print arr # [1,2]
有关difference between append
vs. extend
list methods in python的更多信息
答案 1 :(得分:1)
arr = []
是一个空列表,当您通过以下方式将tmp
附加到它时:
tmp = [1, 2]
arr.append(tmp)
您正在将tmp
放在arr
列表中,从而给您arr = [tmp]
,可以将其扩展为arr = [[1,2]]
。但这里的巧妙之处在于,您可以通过[1,2]
变量维护对列表的引用temp
。因此,当您附加temp
时,将附加arr
中的相同列表。
为进一步说明,仅将tmp
附加到arr
并不意味着结果列表[[1,2]]
将成为内存中的一个连续块。您将拥有arr
列表,而arr
的第一个元素将是指向列表tmp
的指针。
答案 2 :(得分:0)
那是因为cd
和cd
都指向同一个对象。
只需一步一步检查即可:
http://www.pythontutor.com/visualize.html
First print statement Second print statement
您可以使用内置的tmp
手动进行检查
arr[0]