使用可变的现有变量创建重复n次的列表

时间:2020-06-09 13:22:49

标签: python python-3.x numpy immutability

我有一个初始化为A = np.array([[1,2,3],[4,5,6],[7,8,9]])的numpy数组,我想创建一个列表C = [A, A, A, A]。我可以做C = [[A] * 4],但是那样会生成一个可变的列表,更改一个元素将更改其他元素。我也知道我们可以这样解决这个问题:C = [np.array([[1,2,3],[4,5,6],[7,8,9]]) for _ in range(3)],但这会使代码很长。使用C = [A for _ in range(3)]没有帮助。我已经在下面进行了验证:

>>> R = np.array([[2,3,0], [6,78,8],[1,2,3]])
>>> R
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U = [R for _ in range(3)]
>>> U[1]
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U[2]
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U[2][2,2]
3
>>> U[1][2,2]
3
>>> U[1][2,2] = 0
>>> U[2][2,2]
0
>>> type(U)
<class 'list'>

我应该怎么做才能创建列表,并使每个内容独立(即不可变)?

1 个答案:

答案 0 :(得分:1)

您可以只使用.copy()

import numpy as np


R = np.array([[2,3,0], [6,78,8],[1,2,3]])
U = [R.copy() for _ in range(3)]

U[1][2,2] = 0

print(U)

礼物:

[array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]]),
 array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  0]]),
 array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])]