这是我在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]
?但这似乎并没有使排序出错。
答案 0 :(得分:0)
alis
列表包含对其他对象的引用; alis[2]
引用了int
对象4
。设置currel = alis[2]
会创建对该同一对象的另一个引用。
但是,将alis[2]
更改为引用其他对象不会影响currel
。您没有更改对象4
,而是更改列表对象引用的内容。因此,currel
不会改变。 currel
继续引用对象4
,未更改。
您可能希望阅读Ned Batchelder在他的Python Conference 2015演示文稿中提供的(优秀)解释:Python Names and Values。您还可以使用pythontutor.com来可视化变量的变化;见your code on that site。