def insert(lst, em):
# insert em in sequence lst
i = 0
while em > lst[i]:
i = i+1
if i == len(lst):
break
lst[:] = lst[:i] + [em] + lst[i:]
def choose(lst1, lst2):
# pick list
if lst1[0] < lst2[0]:
return lst1
else:
return lst2
l1 = [4]
l2 = [6]
insert(l2,5)
insert(l1,5)
l3 = choose(l1,l2)
print l1,l3############
insert(l3,1)
print l1,l2,l3
>>> ================================ RESTART ================================
>>>
[1, 4, 5] [5, 6] [1, 4, 5]
所以我知道在插入(l3,1)之前我得到了L1 = L3 = [4 5] 并且L2 = [5 6]并且我同意在插入(L3,1)之后被称为L3 = [1 4 5]但是我不明白为什么L1也会改变。有人可以为我澄清这个吗?
答案 0 :(得分:1)
以下是一步一步发生的事情:
l3 = choose(l1,l2)
重要的是要意识到当你说l3
时,l1
被分配到与insert(l3,1)
完全相同的列表 - 也就是说,它们指向完全相同的内存位置。因此,当您致电l1
时,您也有效地插入choose()
。
此博客文章可能有助于解释更多内容:http://henry.precheur.org/python/copy_list
如果您lst1
使用lst2
(或list(lst1)
返回list(lst2)
或x = [4,5,6]
id(x) -- returns 4369059920
y = x
id(y) -- returns 4369059920 (same as id(x))
y = list(x) -- make a copy of x
id(y) -- returns 4368985048 -- something different from id(x)
的副本,情况会有所不同。例如,请考虑这些陈述序列:
string1 = '> [HELP.SELECTOR]'