В функции «изменить (пар.)», «пар [:]« уже сделать локальную копию? Он работает для списка, почему он не работает для массива?Python: Локальная копия массива/списка в функциях
import numpy
def change(par):
copy = par[:]
copy[0] = 123
def main():
L = [0, 0, 0]
print '\nL before: ' + str(L)
change(L)
print 'L after: ' + str(L)
A = numpy.zeros((1, 3))
print '\nA before: ' + str(A)
change(A[0])
print 'A after: ' + str(A)
if __name__ == '__main__':
main()
Выход:
L before: [0, 0, 0]
L after: [0, 0, 0]
A before: [[ 0. 0. 0.]]
A after: [[ 123. 0. 0.]]
UPDATE
Спасибо за указание на "номинальной [:]" представляет собой неглубокую копию, и он не работает для массива.
Как работает «мелкая копия» в случае структур массива? В случае списка «мелкая копия» копирует значения, но когда она превращается в массив, «мелкая копия» просто копирует ссылки не значениями?
Как «[:]« различать, когда копировать значения и когда просто копировать ссылки?
Вы делаете неполную копию –