适用于任意数据结构的交换方法
我在用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_
会被更新,因为在函数调用时,list_[4]
和list_[2]
会被赋予新值。然而,list_
却没有变化:
list_
[5, 4, 6, 3, 7]
我搞不懂为什么调用swap函数时处理的是一个副本。我不想在我的swap函数中添加一个列表参数,也不想在swap()
调用时返回这个列表,因为我希望这个方法能够适应其他数据结构,比如在
swap(mat[0][1],mat[2,3])
2 个回答
5
在Python中,传递的是值,所以交换操作不会影响原来的列表。你只需要使用下面的代码:
list_[4], list_[2] = list_[2], list_[4]
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