Python Numpy数组更改列表元素

Python Numpy数组更改列表元素,python,arrays,list,numpy,Python,Arrays,List,Numpy,以上的输出是- import numpy as np a = np.arange(20) print('a:', a) L1 = [] L1.append(a) print('L1:', L1) a[-8:17:1] = 1 print('a:', a) L1.append(a) print('L1:', L1) 为什么L1的第一个元素在变化?如何防止其更改?变量a不是简单的数据类型np.array,因此,当您将其赋值或(在您的情况下)附加到变量时,您不是在附加副本,而是对对象的引

以上的输出是-

import numpy as np  
a = np.arange(20) 
print('a:', a) 
L1 = []
L1.append(a)
print('L1:', L1)
a[-8:17:1] =  1
print('a:', a)
L1.append(a)
print('L1:', L1) 
为什么L1的第一个元素在变化?如何防止其更改?

变量a不是简单的数据类型np.array,因此,当您将其赋值或(在您的情况下)附加到变量时,您不是在附加副本,而是对对象的引用。因此,对象上的任何更改都将反映在引用它的任何地方

使用.copy可以解决您的问题:

L1.附件A.副本 看看这个QA。
a: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
L1: [array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])]
a: [ 0  1  2  3  4  5  6  7  8  9 10 11  1  1  1  1  1 17 18 19]
L1: [array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  1,  1,  1,  1,  1,
       17, 18, 19]), array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  1,  1,  1,  1,  1,
       17, 18, 19])]