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

Copy a list of list by value and not reference

为了理解为什么我在程序中遇到错误,在该程序中我试图找到行列式的 "minor",我编写了一个更简单的程序,因为我的变量被搞乱了。下面的这个函数接受一个 2 * 2 矩阵作为输入,returns 一个包含其行的列表(我知道毫无意义且效率低下,但我试图理解这背后的理论)。

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

但是,这里似乎 B 被动态分配了 A 的值,从某种意义上说,我无法将 A 的初始值存储在 B 中以供使用稍后。这是为什么?

因为python 通过引用传递列表

这意味着当你写 "b=a" 你是说 a 和 b 是同一个对象,当你改变 b 你也改变了 a,反之亦然

一种按值复制列表的方法:

new_list = old_list[:]

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

import copy
new_list = copy.deepcopy(old_list)

A 看起来像引用类型,而不是值类型。引用类型不会在赋值时被复制(不像 R)。您可以使用 copy.copy 对元素进行深度复制

由于 Python 通过引用传递列表,AB 是相同的对象。当您修改 B 时,您也在修改 A。这种行为可以在一个简单的例子中得到证明:

>>> A = [1, 2, 3]
>>> def change(l):
...     b = l
...     b.append(4)
... 
>>> A
[1, 2, 3]
>>> change(A)
>>> A
[1, 2, 3, 4]
>>> 

如果您需要 A 的副本,请使用切片表示法:

B = A[:]