EPtmp = EP
делает EPtmp ссылкой на EP, что означает, что если вы измените EPtmp, вы на самом деле меняете EP, потому что это один и тот же массив.
EPtmp[:]
= EP делает копию EP, поэтому при изменении EPtmpне изменит EP.
Попробуйте в вашей консоли следующее:
a=[1,2]
b=[0,0]
a=b
a[0]=5
b
Out[13]: [5, 0]
и
a=[1,2]
b=[0,0]
a[:]=b
a[0]=5
b
Out[18]: [0, 0]
Но нарезка также работает наоборот.Если у вас есть b = a
, а затем установите a, выполнив a = [], b не изменится, потому что вы создаете новый a.Однако, если вы не создаете новый a, а явно перезаписываете старый с помощью a[:]=[]
, изменяется b.
Попробуйте:
a=[1,2]
b=a
c=b
a=[1,3] #doesn't change b and c
b[:]=[1,4] #changes c
По сути, a = b означает, что a является указателем на то, где b указывает в памяти, а a [:] = b означает запись содержимого b, где a указываетк.
Итак, в вашем примере ваш диктонар содержит указатель на EPtmp.По EP_spec_dict[species_names[index_target_global]] = EPtmp
Теперь, если вы создаете новый EPtmp с EPtmp=EP
, он находится в другом разделе памяти, а EP_spec_dict[species_names[index_target_global]]
по-прежнему указывает на старый раздел памяти EPtmp.Однако с EPtmp [:] = EP вы просто перезаписываете содержимое памяти EPtmp, а не делаете новый.