Skip to main content
 首页 » 编程设计

python之如何将列表作为值而不是引用传递

2025年05月04日14pengyingh

我有一个接受列表或 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[:]) 

通过首先创建完整副本,您现在拥有一个不同的值。