Сколько копий списков создает, когда 2 списка объединяются с оператором +? - PullRequest
0 голосов
/ 30 августа 2018

Я прочитал много информации здесь и здесь , но я до сих пор не понимаю, является ли python действительно 6 копий списков, когда, например, он объединяет [1,2,3,4] + [5,6] эти 2 списки

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Нет, только ссылки копируются. Сами объекты вообще не копируются. Смотрите это:

class Ref:
   ''' dummy class to show references '''
   def __init__(self, ref):
       self.ref = ref
   def __repr__(self):
      return f'Ref({self.ref!r})'

x = [Ref(i) for i in [1,2,3,4]]
y = [Ref(i) for i in [5,6]]

print(x)   # [Ref(1), Ref(2), Ref(3), Ref(4)]
print(y)   # [Ref(5), Ref(6)]

z = x + y
print(z)   # [Ref(1), Ref(2), Ref(3), Ref(4), Ref(5), Ref(6)]

# edit single reference in place
x[0].ref = 100
y[1].ref = 200

# concatenated list has changed
print(z)  # Ref(100), Ref(2), Ref(3), Ref(4), Ref(5), Ref(200)]
0 голосов
/ 30 августа 2018

Допустим, существует n номеров списка l1, l2, l3, ... и если вы добавите их, у него будет только одна копия на каком-либо адресе.

Например:

In [8]: l1 = [1,2,3]
In [9]: l2 = [4,5,6]

In [10]: id(l1 + l2)
Out[10]: 140311052048072

In [11]: id(l1)
Out[11]: 140311052046704

In [12]: id(l2)
Out[12]: 140311052047136

id () возвращает идентификатор объекта. https://docs.python.org/2/library/functions.html#id

0 голосов
/ 30 августа 2018

Python не делает 6 копий списка, скорее он соединяет или объединяет два списка и превращает их в один, т.е. [1,2,3,4,5,6].

Объединение списков в Python: Как объединить два списка в Python? .

...