2017-01-24 7 views
0

У меня есть 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 
+0

Что вы имеете в виду «LHS обр отличается от RHS обр»? –

ответ

2

при назначении, как это:

arr = arr[2:] + arr[:2] 

вы создаете новую ссылку на arr, а старый разрушен. Средства выделения/удаления.

Вы должны сделать назначения ломтика:

arr[:] = arr[2:] + arr[:2] 

arr сохраняет ту же ссылку, и если размер не меняется, нет allocaton памяти не происходит для 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

0

<1,2,3,4> хранятся где-то в памяти. arr имеет ссылки на <1,2,3,4> и arr[2:] ссылается на свои изображения <3,4>, ссылки на которые имеют arr.

Для списка номеров вы используете дополнительное пространство для этих ссылок, но не сами цифры.

Для получения списка объектов с высоким профилем это фактически становится более эффективным средством памяти для борьбы с ним.

Я предлагаю читать через это:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/