我在使用Python
实现自己的swap()
方法时遇到了这个问题
def swap(a,b):
temp=a
a=b
b=temp
list_=[5,4,6,3,7]
swap(list_[4],list_[2])
由于swap()
和list_[4]
将在函数调用期间分配新值,因此我通过list_[2]
调用更新了list_。但是,list_
保持不变:
list_
[5, 4, 6, 3, 7]
我误解了为什么交换函数调用正在处理副本。我不想在我的交换函数中添加一个列表参数,也不想在swap()调用期间返回列表,因为我希望该方法适用于其他数据结构,例如
swap(mat[0][1],mat[2,3])
答案 0 :(得分:8)
你对Python的运作方式不感兴趣:
list_=[5,4,6,3,7]
swap(list_[4],list_[2]) # this is absolutely the same as
swap(7,6)
Python的基本概念是使用名称和值。当您在代码中记下名称时,它代表运行时附加到它的值。在这种情况下,list_[4]
是代表值7
的名称。
如果您想要更改某些内容,则必须使用其中一个名称。在这里,您要更改list_
,因此您必须执行此操作:
def swap(data, i1, i2):
data[i1], data[i2] = data[i2], data[i1]
swap(list_, 4,2) # swaps list index 4 and 2
答案 1 :(得分:5)
python按值传递,因此交换不会影响原始列表。 只需使用
list_[4], list_[2] = list_[2], list_[4]