为什么删除程序第 7 行中的"A=[13,20,7,12,10,2,5,1,0,18]"最终会更改 print(D)?

  • 本文关键字:print 删除程序 python list
  • 更新时间 :
  • 英文 :


在我的程序中保留或删除第7行不应该改变输出,因为我只会给"A"分配两次相同的值。但是删除它会改变输出。这是代码

def C(A):
A[1]=A[8]+A[4]
return A
D=[]
A=[13,20,7,12,10,2,5,1,0,18]
Z=A
A=[13,20,7,12,10,2,5,1,0,18]  #When I delete this line, print(D) in the end gives different value . 
A[9]=A[3]-A[0]
if A[9]>0:
A[2] = A[9] * A[1]
else:
C(A)
if A[1]>A[6]:
A[2]=A[9]*A[1]
else:
while 2>1:
C(A)
if A[1]>A[6]:
A[2]=A[9]*A[1]
break
for x in range(0,len(A)):
if (Z[x] == A[x]):
D.append(A[x])
print(D)

如果它与浅内存有关,为什么即使我删除了第3行,这个代码也会给出相同的输出?

A=[13,20,7,12,10,2,5,1,0,18]
Z=A
A=[1,1,1,1,1,1,1,1,1,1]
print(Z)

通过赋值显示每个变量的ID。

>>> A = [1,2,3]
>>> id(A)
19812552
>>> Z=A 
>>> id(Z)
19812552
>>> id(A)
19812552
>>> A = [1,2,3]
>>> id(A) 
19917160
>>> id(Z)
19812552

正如您所看到的,当您将A重新分配到以前的位置时,它会更改地址,这意味着它不再是Z的浅拷贝,而是一个全新的列表。

对于问题的第二部分,让我们取2个地址(X和Y(和2个变量(A和B(:

A = [1,2,3] ( A now points to address X)
B = A (Z points to the same address as A, Z points to X)
A = [1,1,1] (A is now stored in a new address, address Y, B/X unchanged)

第二行不会更改变量B,因此如果删除第3行,则不会更改输出。

最新更新