Чтобы понять, что происходит, нужно заменить =
на is now a name for
.
То, что вы делаете в цикле:
p
теперь имядля dic[k]
p
теперь имя для вывода np.asfarray(p)
и т. д. в каждом цикле.Когда вы выходите из цикла for
, p
относится к выводу np.asfarray(dic('z'))
.И это все, что здесь произошло.
Если вы хотите обновить значения в вашем dict, вы должны сделать:
dic = {'x':x,'y':y,'z':z}
for k in dic:
dic[k] = np.asfarray(dic[k])
или, немного лучше:
for key, value in dic.items():
dic[key] = np.asfarray(value)
Теперь, dic['y'] refers to the array returned by
np.asfarray`
Но вы ничего не сделали с y
, поэтому он по-прежнему ссылается на тот же объект, что и раньше.Если вы хотите изменить это, вы должны написать что-то вроде y = ....
Вы можете, например, сделать:
y = dic['y']
Для более подробного объяснения взгляните на Фактыи мифы об именах и значениях Python