按值复制列表列表而不是引用

Sph*_*ner 5 python variables reference deep-copy python-2.7

要理解为什么我在程序中遇到错误,我试图找到一个决定因素的"次要",我写了一个更简单的程序,因为我的变量搞砸了.下面这个函数接受一个2*2矩阵作为输入,并返回一个包含其行的列表(毫无意义和低效,我知道,但我正在试图理解这背后的理论).

def alpha(A):   #where A will be a 2 * 2 matrix
    B = A       #the only purpose of B is to store the initial value of A, to retrieve it later
    mylist = []
    for i in range(2):
        for j in range(2):
            del A[i][j]
        array.append(A)
        A = B
    return mylist
Run Code Online (Sandbox Code Playgroud)

但是,在这里似乎B被动态赋值为A ,因为我无法将B的初始值存储在B中以便以后使用它.这是为什么?

Nik*_*ido 10

因为python通过引用传递列表这意味着当你写"b = a"时你说a和b是同一个对象,而当你改变b时你也改变了a,反之亦然

按值复制列表的方法:

new_list = old_list[:]
Run Code Online (Sandbox Code Playgroud)

如果列表包含对象并且您也想要复制它们,请使用通用copy.deepcopy():

import copy
new_list = copy.deepcopy(old_list)
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,您需要创建一个 `deepcopy`,因为它们有一个列表列表。 (4认同)