Почему это происходит? Должен ли я использовать копию numpy.array? но , похоже, работает с 1-м кодом. Не могу понять, почему.Почему list.append ведет себя по-разному в цикле «for» с разными уровнями
import numpy as np
n=3
h_all=[]
h=np.zeros((n,n))
for i in range(0, n):
h = h + 1.
h_all.append(h)
print h_all
дает
[array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]), array([[ 2., 2., 2.], [ 2., 2., 2.], [ 2., 2., 2.]]), array([[ 3., 3., 3.], [ 3., 3., 3.], [ 3., 3., 3.]])]
который хорош , но если я код, как
n=3
h_all=[]
h=np.zeros((n,n))
maxnum=3
for k in range(0, n):
for i in range(0, n):
for j in range(0, n):
h[i,j] = h[i,j] + 1.
h_all.append(h[:])
print h_all
It becomes: [array([[ 3., 3., 3.], [ 3., 3., 3.], [ 3., 3., 3.]]), array([[ 3., 3., 3.], [ 3., 3., 3.], [ 3., 3., 3.]]), array([[ 3., 3., 3.], [ 3., 3., 3.], [ 3., 3., 3.]])]
Спасибо за помощь @hpaulj. Ниже приведено следующее: ** 1 ** 'id (h_all [0])' и 'id (h_all [i])' не совпадают (для обоих кодов) ** 2 ** ' h + = 1' изменяет все 'h' в' h_all' для второго кода, но не влияет на результат 'h_all' от первого кода. ** 3 ** В первом коде, почему h не действует как указатель так же, как во втором коде? – Gang
Я забыл; 'h [:]' создает 'view' массива. Это новый объект, но он разделяет базовые данные. Таким образом, 'id' будет отличаться на каждой итерации; но значения разделяются. 'h.copy()' необходимо использовать в итерации следующим образом. – hpaulj
'h.copy()' работал! Благодаря! – Gang