我有一个接受列表或 numpy 数组 v 的函数。 函数修改 v 因此原始向量 x 也发生变化(因为诅咒这是一个引用)。我想要 x 的旧值。 有一些简单的解决方案,但它们看起来不是很优雅。
解决这个问题最符合 Python 风格的方法是什么?
举个例子
def change_2(v):
v[2]=6
return v
x=[1,2,3]
z=change_2(x)
print "x=", x,"z=",z
x= [1, 2, 6] z= [1, 2, 6] #I would like x=[1, 2, 3]
请您参考如下方法:
创建列表的副本:
def change_2(v):
v = v[:]
v[2] = 6
return v
Python 已经 为您提供了值(value),即对象本身。您正在通过更改其内容来更改该值。
v[:] 获取列表中所有索引的一部分,创建一个新的列表对象来保存这些索引。另一种方法是使用 list() 构造函数:
v = list(v)
另一种选择是将创建副本的责任留给调用者:
def change_2(v):
v[2] = 6
return v
x = [1,2,3]
z = change_2(x[:])
通过首先创建完整副本,您现在拥有一个不同的值。
