Python赋值及其工作原理 运行下面的代码的结果是什么? def插入(lst,em): #在序列lst中插入em i=0 而em>lst[i]: i=i+1 如果i==len(lst): 打破 lst[:]=lst[:i]+[em]+lst[i:] def选择(lst1、lst2): #挑选名单 如果lst1[0]>>=================================================重新启动================================ >>> [1, 4, 5] [5, 6] [1, 4, 5]

Python赋值及其工作原理 运行下面的代码的结果是什么? def插入(lst,em): #在序列lst中插入em i=0 而em>lst[i]: i=i+1 如果i==len(lst): 打破 lst[:]=lst[:i]+[em]+lst[i:] def选择(lst1、lst2): #挑选名单 如果lst1[0]>>=================================================重新启动================================ >>> [1, 4, 5] [5, 6] [1, 4, 5],python,variable-assignment,Python,Variable Assignment,所以我知道在调用insert(l3,1)之前,我得到了L1=l3=[45] L2=[56],我同意插入后(L3,1)被称为L3=[1,4,5],但我不明白为什么L1也会改变。谁能帮我澄清一下吗?下面是一步一步发生的事情: l1=[4] l2=[6] insert(l2,5) # l2 = [5,6] insert(l1,5) # l1 = [4,5] l3=choose(l1,l2) # l3 = l1 print l1,l3 inser

所以我知道在调用insert(l3,1)之前,我得到了L1=l3=[45]
L2=[56],我同意插入后(L3,1)被称为L3=[1,4,5],但我不明白为什么L1也会改变。谁能帮我澄清一下吗?

下面是一步一步发生的事情:

l1=[4]
l2=[6]
insert(l2,5)            # l2 = [5,6]
insert(l1,5)            # l1 = [4,5]
l3=choose(l1,l2)        # l3 = l1
print l1,l3
insert(l3,1)            # l3 = [1,4,5] and l1 = [1,4,5]
print l1,l2,l3
重要的是要认识到,当您说
l3=choose(l1,l2)
时,则
l3
被分配到与
l1
完全相同的列表中-也就是说,它们指向完全相同的内存位置。因此,当您调用
insert(l3,1)
时,您也在有效地插入
l1

这篇博文可能有助于解释更多发生的事情:

<> >如果您有<代码>选择()<代码> >使用<代码>列表(LST1)(或<代码>列表(LST2))返回“<代码> LST1 或<代码> 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)

L1和L3是相同的列表。
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)