浅拷贝列表
Shallow copy list
我很难用下面的浅表来弄清楚这里发生了什么。
在此代码中,在对列表 (matrix2) 的浅表副本进行修改后,我们替换了列表中的整个列表,尽管 matrix2 是矩阵1.
>>> matrix1 = [[1, 2], [3, 4]]
>>> matrix2 = matrix1[:]
>>> matrix2[0] = [5, 6]
>>> matrix2
[[5, 6], [3, 4]]
>>> matrix1
[[1, 2], [3, 4]]
在这部分代码中,结果是不同的,因为对一个列表中的值的修改会反映到两个矩阵中。
>>> matrix2[1][0] = 1
>>> matrix2
[[5, 6], [1, 4]]
>>> matrix1
[[1, 2], [1, 4]]
我发现如下:
发生这种情况是因为列表实际上并不包含对象本身,而是对内存中这些对象的引用。当您使用 [:]
符号复制列表时,将返回一个新列表,其中包含与原始列表相同的引用。
你能帮我弄清楚以上文字的真正含义吗?也许我在这里遗漏了一些东西,我自己找不到答案。
例如,您有一个列表 matrix1=[[1,2], [3,4]]
并将其分配给
matrix2 = matrix1
。当您将 matrix1
分配给 matrix2
时,它只是共享一个引用,它不会创建新数组。现在,如果您更改 matrix1
或 matrix2
中的任何数据,更改将应用于两个列表。
但是如果你使用切片操作,它会创建一个新的列表matrix2 = matrix1[:]
。现在,如果您更改 matrix2
或 matrix1
中的任何数据,更改将分别应用。
注意:切片操作产生列表的浅拷贝。
matrix2[0][0] = x
这将在两个列表中发生变化,因为浅拷贝仅适用于一个级别,如 matrix2[0] = [x,y]
.
如果您不想更改数据,则可以使用 deepcopy
。它递归地复制每个对象。
我很难用下面的浅表来弄清楚这里发生了什么。
在此代码中,在对列表 (matrix2) 的浅表副本进行修改后,我们替换了列表中的整个列表,尽管 matrix2 是矩阵1.
>>> matrix1 = [[1, 2], [3, 4]]
>>> matrix2 = matrix1[:]
>>> matrix2[0] = [5, 6]
>>> matrix2
[[5, 6], [3, 4]]
>>> matrix1
[[1, 2], [3, 4]]
在这部分代码中,结果是不同的,因为对一个列表中的值的修改会反映到两个矩阵中。
>>> matrix2[1][0] = 1
>>> matrix2
[[5, 6], [1, 4]]
>>> matrix1
[[1, 2], [1, 4]]
我发现如下:
发生这种情况是因为列表实际上并不包含对象本身,而是对内存中这些对象的引用。当您使用 [:]
符号复制列表时,将返回一个新列表,其中包含与原始列表相同的引用。
你能帮我弄清楚以上文字的真正含义吗?也许我在这里遗漏了一些东西,我自己找不到答案。
例如,您有一个列表 matrix1=[[1,2], [3,4]]
并将其分配给
matrix2 = matrix1
。当您将 matrix1
分配给 matrix2
时,它只是共享一个引用,它不会创建新数组。现在,如果您更改 matrix1
或 matrix2
中的任何数据,更改将应用于两个列表。
但是如果你使用切片操作,它会创建一个新的列表matrix2 = matrix1[:]
。现在,如果您更改 matrix2
或 matrix1
中的任何数据,更改将分别应用。
注意:切片操作产生列表的浅拷贝。
matrix2[0][0] = x
这将在两个列表中发生变化,因为浅拷贝仅适用于一个级别,如 matrix2[0] = [x,y]
.
如果您不想更改数据,则可以使用 deepcopy
。它递归地复制每个对象。