LINUX.ORG.RU

Присвоение значения переменных друг другу в Питоне.


0

1

Хочу прояснить для себя вкратце основные вещи на тему переменных в питоне. Как я понимаю, о переменных в питоне лучше думать как об указателях на какие-то объекты в памяти. Например

s = 'hello world'
x = s

Будут в реальности как-бы указателями на константную строку (в терминах языка Си), а не содержать копии этой строки (подобно std::string).

Точно также, если я написал

f = open('123.txt')
data = f.read()
f.close()
data2 = data
data3 = data

data, data2, data3 будут «указателями» на один кусок в памяти, находящийся в собственности у уборщика мусора, а не содержать каждая по копии данных? Поэтому пока я не делаю deepcopy, любые присвоения - это «работа с указателями» без потери производительности на копирование данных?

Спасибо.

data, data2, data3 будут «указателями» на один кусок в памяти. Только не кусок, а место или область.

XoFfiCEr ★★ ()
Последнее исправление: XoFfiCEr (всего исправлений: 1)

Но память будет скопирована при попытке изменить один из этих «указателей»

Вообще почитай про mutable и immutable types в Питоне, многое прояснится

redbaron ★★ ()
Ответ на: комментарий от redbaron

куда она будет скопирована?

In [1]: a=[1,2,3]

In [2]: b=a

In [3]: b.append(5)

In [4]: a
Out[4]: [1, 2, 3, 5]

In [5]: a[0]=10

In [6]: b
Out[6]: [10, 2, 3, 5]

In [7]: 

nokachi ()
Ответ на: комментарий от nokachi

Там же речь идет вроде о строках, причем тут списки? Вам тоже не помешает почитать про mutable/immutable

redixin ★★★★ ()
Ответ на: комментарий от redixin

Но память будет скопирована

какая память куда будет скопирована?

nokachi ()

пока я не читаю первые главы документации..

trashymichael ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.