为什么在使用同步分配交换元素时不调用引用?

Why not call a reference when swapping elements using simultaneous assignment?

我有一个关于 python 中交换元素的问题,我在网上找不到答案。我尝试的两种选择之间有什么区别,为什么只有第二种选择给出预期的输出? 我研究了一种选择排序算法,因此不得不交换列表的元素。我已将 max(my_list) 的值分配给变量 max_item.

(1) 这是我第一次尝试交换 max_itemmy_list[-1]:

max_item, my_list[-1] = my_list[-1], max_item

实际输出为:

[value of max_item, value of max_item]

(2) 然后我尝试了以下操作:

my_list[my_list.index(max_item)], my_list[-1] = my_list[-1], my_list[my_list.index(max_item)]

这给出了预期的输出:

[value of my_list[-1], value of max_item]

非常感谢任何建议。提前致谢!

max_itemmy_list无关,即使你这样做:

max_item = max(my_list)

my_list 中包含最大项的索引和 max_item 都是 别名 绑定到同一基础对象,但是当您重新分配 max_item (而不是就地改变它,例如通过改变方法调用,或重新分配它的一个属性),你 重新绑定 这个名字,打破别名,在 my_list.

您的第二行代码有效,因为您在 my_list 中重新绑定了适当的索引。不过,您只需要查找它以进行重新分配,因此您可以使用以下方法加快代码速度并稍微简化一下:

my_list[my_list.index(max_item)], my_list[-1] = my_list[-1], max_item