如何在python中分配新数组而不是构建指针
在下面的代码中,我希望得到:如何在python中分配新数组而不是构建指针,python,python-3.x,list,reference,pass-by-reference,Python,Python 3.x,List,Reference,Pass By Reference,在下面的代码中,我希望得到: [[1, 4, 6], [2, 3, 6], [2, 4, 5]] 但它返回: [[1, 3, 5], [1, 3, 5], [1, 3, 5]] 有两个问题: 函数b中的单词是一个引用,而不是一个新变量 放在孩子身上的一切都是参考 我的代码: def b(word,i): word[i] = word[i]-1 return word def a(individual): child = [] for i in range(
[[1, 4, 6], [2, 3, 6], [2, 4, 5]]
但它返回:
[[1, 3, 5], [1, 3, 5], [1, 3, 5]]
有两个问题:
- 函数b中的单词是一个引用,而不是一个新变量李>
- 放在孩子身上的一切都是参考李>
def b(word,i):
word[i] = word[i]-1
return word
def a(individual):
child = []
for i in range(len(individual)):
child.append(b(individual,i))
return child
print(a([2,4,6,8]))
只需将
b
功能更改为:
def b(word,i):
tmp = word.copy()
tmp[i] = tmp[i]-1
return tmp
因为当您实际更改
个人
列表时,整个程序都会更改,我的意思是您的代码是编写的,但当您将2
更改为1
时,整个程序都会更改。为了更好地理解,请在追加后添加一个打印('child')
。您已经回答了自己的问题。您需要按值传递: