Pomyśl o tym w ten sposób: W pierwszym przypadku, dla niezmiennych obiektów takich jak krotek, to bezpieczne dla implementacja Pythona, aby dzielić się nimi, jeśli są identyczne:
>>> a =()
>>> b =()
>>> a is b
True
Rozważmy teraz:
>>> a = []
>>> b = []
>>> a.append("foo")
>>> print a,b
['foo'] []
Nie jest możliwe, aby aib były tym samym obiektem, ponieważ modyfikacja nie powinna modyfikować b.
W swoim ostatnim przykładzie powróciłeś do niezmiennych krotek. Wdrożenie w języku Python to , które zezwala na, aby uczynić je tym samym obiektem, ale nie jest do tego wymagane, a w tym przypadku nie (to w zasadzie kompromis czasoprzestrzenny - jeśli używałeś dużo (1,) w swoim program mógłbyś zaoszczędzić pamięć, gdyby był internowany, ale kosztowałoby to środowisko wykonawcze, aby określić, czy dana krotka była (1,), która mogłaby współdzielić obiekt).
Uwaga "internowania" może (zwykle ma) stosuje się do strun, a także każdej innej niezmiennej dosłownym/wartość. Ponieważ są one niezmienne, każda implementacja Pythona ma opcję tworzenia różnych odniesień zbiegających się (wskazywać) na dowolne pojedyncze wystąpienie obiektu. To właśnie oznacza interning w tym kontekście. Interning to szczegół implementacji, który optymalizuje się pod kątem typowych przypadków użycia. Listy Pythona są zresztą zmienne i nie mogą być przedmiotem interwencji. –
Pierwsza nie jest porównaniem listy i krotki, ale między dwiema listami. Jest to wartość false, ponieważ są to różne obiekty (to znaczy różne identyfikatory), które mają tylko tę samą wartość (tj. Obie są pustymi listami). – rbp
@rbp, dzięki, źle odczytałem pytanie. –