W Pythonie (2 i 3). Ilekroć używamy wycinania list, zwraca nowy obiekt, np .:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Wynik
>>> 140344378384464
>>> 140344378387272
Jeśli to samo powtarza się z krotką, zwracany jest ten sam obiekt, np .:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Wynik
>>> 140344379214896
>>> 140344379214896
Byłoby wspaniale, gdyby ktoś mógł wyjaśnić, dlaczego tak się dzieje, przez całe moje doświadczenie w Pythonie miałem wrażenie, że pusty plasterek zwraca nowy obiekt.
Rozumiem, że zwraca ten sam obiekt, ponieważ krotki są niezmienne i nie ma sensu tworzyć nowej kopii. Ale znowu, nigdzie nie wspomniano w dokumentach.
l2 = tuple(iter(l1))
omija optymalizację
PyTuple_GetSlice
zostało udokumentowane niedokładnie po zobaczeniu twojego pytania. Dokumenty zostały teraz naprawione (był to błąd BPO38557 ).