Обновление списка занимает дополнительное место?
У меня есть array or list
Теперь я хочу внести некоторые изменения в массив и вернуть обратно в arr
variable/list
, Я использую дополнительное пространство? или это та же самая переменная снова обновляется?
arr = [1,2,3,4]
print arr[2:] + arr[:2] # Is is using extra space
#or
arr = arr[2:] + arr[:2] # Is is using extra space
#or
arr = [1,2,3,4]
arr = arr # are not they both same? LHS arr is different from RHS arr
2 ответа
При назначении так:
arr = arr[2:] + arr[:2]
вы создаете новую ссылку на arr
и старый уничтожен. Распределение / удаление средств.
Вы должны сделать назначение среза:
arr[:] = arr[2:] + arr[:2]
arr
сохраняет ту же ссылку, и если размер не изменяется, распределение памяти для arr
(но сумма правой части и нарезка все еще нуждаются в распределении)
Демо-версия:
arr = [1,2,3,4]
old_arr = arr
arr = arr[2:] + arr[:2]
print(old_arr is arr)
результат: False
arr = [1,2,3,4]
old_arr = arr
arr[:] = arr[2:] + arr[:2]
print(old_arr is arr)
результат: True
<1,2,3,4>
хранятся где-то в памяти. arr
имеет ссылки на <1,2,3,4>
а также arr[2:]
имеет ссылки на то же самое <3,4>
тот arr
имеет ссылки на.
Для списка номеров вы используете дополнительное пространство для этих ссылок, но не сами цифры.
Для списка высококлассных объектов это фактически становится более эффективным способом использования памяти.
Я предлагаю прочитать это:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/