这是我在Python中对插入排序的尝试:
def insert(alis):
for i in range(1,len(alis)):
currel = alis[i]
j = i
while j > 0 and alis[j]<alis[j-1]:
alis[j] = alis[j-1]
alis[j-1]= currel
j=j-1
print (alis)
alis = [3,2,6,2,1,678,23,98]
insert(alis)
这似乎管用,但让我困惑的是
alis = [4,3,2,1]
在i = 1
之后,alis = [3,4,2,1]
。所以当alis[2]
被设置为4
时,currel
的值是否会从2
变为4
?所以你会得到[3,4,4,1]
?但这似乎并没有让这类事情出错。你知道吗
alis
列表包含对其他对象的引用;alis[2]
引用int
对象4
。设置currel = alis[2]
将创建对同一对象的另一个引用。你知道吗但是,将
alis[2]
更改为引用另一个对象不会影响currel
。您没有更改对象4
,而是更改列表对象引用的内容。因此,currel
不变。currel
继续引用对象4
,保持不变。你知道吗您可能需要阅读Ned Batchelder在其Python会议2015演示文稿中给出的(出色的)解释:Python Names and Values。你也可以使用pythontutor.com可视化变量发生了什么;参见your code on that site。你知道吗
相关问题 更多 >
编程相关推荐