Обновление списка занимает дополнительное место?

У меня есть array or listТеперь я хочу внести некоторые изменения в массив и вернуть обратно в arrvariable/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/

Другие вопросы по тегам