我有一個 numpy 數組初始化,因為 A = np.array([[1,2,3],[4,5,6],[7,8,9]])我想創建一個列表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]])>>> Rarray([[ 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 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
你可以只使用.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]])]
添加回答
舉報
0/150
提交
取消