如何在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')

您已经回答了自己的问题。您需要按值传递: