Если вы не хотите изменять текущую функцию (my_matrix, value)
, вы можете просто передать копию этой функции с помощью:
new_mat, rep_index = replace_index(my_matrix.copy(), value)
Краткое объяснение:
Эта проблема обычно возникает вpython, всякий раз, когда вы передаете изменяемый в функцию . Mutables , такие как np.ndarray
, list
или dict
, будут переданы функции по ссылке .Это означает, что все операции, выполненные над ними, можно увидеть во внешней области, если вы не перепроверете ссылку.Операции перепривязки обычно представляют собой операции, которые изменяют адрес памяти объекта, такие как добавление, конкатенация, копирование, просто перезапись новым объектом и т. Д.и новый тип, очевидно, будет list
), тогда как a[:] = [1., 2., 3.]
- нет, поскольку a[:] =
обращается к основной области памяти для назначения значений, тогда как a = ...
перепривязывает ссылку a
.