【发布时间】:2020-11-19 20:21:31
【问题描述】:
我是 Python 新手,以下玩具问题让我感到困惑:
import numpy as np
V = np.ones([3,3])
Vini = V
Niter = 10
Vlist = list() # collect all iterations
Vlist.append(V)
for it in range(1, Niter-1):
for ix in range(0,3):
for iy in range(0,3):
V[iy,ix] = Vlist[it-1][iy,ix] + 1
Vlist.append(V) # save current iteration
(请注意,我不是在追求效率提升——这纯粹是为了教学目的)
我的问题是 Vlist 的所有元素都是相同的,我希望它们在每次迭代中都不同(相差 1)。甚至Vini也改变了它的价值!这是一种浅/深复制的东西,还是别的什么?我该如何解决这个问题,我该如何推理这种事情? (来自其他语言,其中 a=b 表示深拷贝)。
【问题讨论】:
-
你一直在对同一个列表附加一个引用:
V -
“我的问题是 Vlist 的所有元素都是相同的”因为您在每次迭代中都不断附加相同的
numpy.ndarray对象:Vlist.append(V)当然,@987654325 @ 只是一遍又一遍地包含相同的对象。这与浅拷贝和深拷贝无关,这与复制与不复制有关。要获取不同的对象,请使用Vlist.append(V.copy())