/ / Przyporządkowanie zmiennych w Pythonie [duplicate] - python

Przypisywanie zmiennych w Pythonie [duplicate] - python

W Pythonie stworzyłem obiekty integer i list w następujący sposób:

a = 10
b = 10
x = []
y = []

Następnie uzyskuję następujące wyniki, porównując identyfikator a i bi identyfikator x i y

id(a)==id(b)  returns True
id(x)==id(y) returns False

Gdzieś czytałem, że to zadanie w Pythonie nigdy nie kopiuje danych. Moje pytanie brzmi: dlaczego x i y nie mają tego samego identyfikatora?

Odpowiedzi:

1 dla odpowiedzi № 1

Musisz wiedzieć, że wszystkie liczby Pythona są zbuforowane i nieumiejętne, co oznacza, że ​​oba a i b etykietują to samo 10. Listy są obiektami i są przydzielane separetly, dlatego ich identyfikatory są różne od początku


1 dla odpowiedzi nr 2

Listy są zmienne, jeśli ten sam obiekt został użyty, kiedy dodasz element do jednej z list, zobaczysz także zmianę na drugiej.

Tożsamość liczb całkowitych zależy od implementacji i zwykle jest ważna tylko dla małych liczb; dobre czytanie tutaj.

Tak poza tym, == jest operatorem równości. Najkrótszy (i czystszy) sposób dla id(a)==id(b) jest użycie operatora tożsamości is. W Twoim przypadku: a is b.


0 dla odpowiedzi № 3

x = [] jest skrótem do tworzenia nowej listy, co oznacza nowy obiekt z nowym identyfikatorem obiektu. Nawet jeśli x i y są przypisywane jako puste listy, są to po prostu odniesienia do lokalizacji pamięci przydzielonych dla odpowiednich list. Jeśli id(x) == id(y) następnie x i y udostępniłby ten sam identyfikator obiektu, co w praktyce oznaczałoby, że współużytkują one lokalizację w pamięci lub są odniesieniami do tego samego obiektu (więc wszelkie zmiany wprowadzone do jednego miałyby zastosowanie do drugiego).

Z drugiej strony, id(a) == id(b) ponieważ są one liczbami całkowitymi, które są prymitywnymi typami danych.