Czytam https://stackoverflow.com/a/19721096/1661745 i wydaje się, że w CPython zmienne są po prostu nazwami, które są powiązane z referencjami.W jaki sposób nazwy zmiennych są przechowywane i mapowane wewnętrznie?
Istnieje kilka rzeczy dzieje się ze stwierdzeniem, x = 5:
- int przedmiot o wartości 5 jest tworzony (lub znalezionego jeśli już istnieje)
- nazwa x jest tworzony (lub odrębnie z ostatniego obiektu „x” oznakowane)
- licznika odwołań do nowego (lub znalezionego) int obiektu jest wzrosła o 1
- nazwa x jest powiązane z obiektem z utworzoną (lub znalezioną) wartością "5" .
Jednak nadal nie jest jasne, w jaki dokładnie sposób zmienne są wdrażane wewnętrznie.
mianowicie:
- nazwa X jest tworzony (lub odrębnie z ostatnim obiekcie 'x' znakowanym);
Czy nazwa nie zajmie również miejsca w pamięci? sys.sizeof(x)
jest równy sys.sizeof(5)
i otrzymuję, że sys.sizeof(x)
może zwrócić tylko rozmiar skojarzonego odniesienia, ale jaki jest rozmiar nazwy x
?
- nazwa x jest związany z obiektem o wartości '5' utworzone (lub znalezionego)
Jak to wdrożony wewnętrznie? Myślę, że na wysokim poziomie można to zrobić przy pomocy dict
, gdzie klucz jest nazwą zmiennej (str
?), A wartość jest odniesieniem, z którym jest powiązana.
* "W jaki sposób jest to realizowane wewnętrznie?" * - w CPython? Powinieneś przeczytać np. http://nedbatchelder.com/text/names.html dla zrozumienia wysokiego poziomu i przekopiuj odpowiedni kod źródłowy, jeśli naprawdę chcesz zrozumieć odwagę. – jonrsharpe
(Na przykład dla CPython, https://hg.python.org/cpython/file/tip/Python/Python-ast.c#l1336) – jonrsharpe