为什么Python中交换赋值变量后列表元素位置没有发生变化?
两段代码运行效果不同的根本原因
Python中的数字属于不可变类型,当你执行number1 = list[inner_iteration - 1]、number2 = list[inner_iteration]赋值操作时,只是把number1、number2这两个临时变量指向了列表对应位置存储的数值对象,这两个临时变量和原列表的对应索引位置没有任何绑定关系。
两段代码的交换逻辑本质完全不同:
- 第一段代码的交换是直接对列表的两个索引位置
list[inner_iteration - 1]、list[inner_iteration]赋值,直接修改了列表本身存储的元素,所以修改会生效,排序逻辑正常。 - 第二段代码的交换仅修改了
number1、number2两个临时变量的指向,没有对原列表做任何修改,列表的元素顺序完全没有变化,自然无法完成排序。
你可以用更简单的测试代码验证这个逻辑:
test_list = [1, 2] a = test_list[0] b = test_list[1] # 仅交换临时变量 a, b = b, a print(test_list) # 输出仍为 [1, 2],列表没有任何变化
内容的提问来源于stack exchange,提问作者toothpick
相关产品推荐
相关产品推荐

