Zmienne języka Python nie są "odniesieniami" w rozumieniu C++. Raczej są po prostu lokalnymi nazwami związanymi z obiektem w jakiejś arbitralnej lokalizacji w pamięci. Jeśli ten obiekt sam się zmienia, zmiany w nim będą widoczne w innych zakresach, które związały nazwę z obiektem. Wiele typów pierwotnych (w tym bool
, int
, str
i) jest jednak niezmiennych. Nie możesz zmienić ich wartości w miejscu; zamiast tego przypisujesz nową wartość tej samej nazwie w swoim zasięgu lokalnym.
W rzeczywistości, prawie za każdym razem * widać kod formularza foo = X
, oznacza to, że nazwa foo
jest przypisane nową wartość (X
) w swojej lokalnej przestrzeni nazw, a nie, że lokalizacja w pamięci nazwany przez foo
jest po zaktualizowaniu wewnętrznego wskaźnika, aby odnieść się do lokalizacji X
.
* - Jedynym wyjątkiem od tego w Pythonie są metody setera dla właściwości, które mogą pozwolić Ci napisać obj.foo = X
i mieć to przepisane w tle, aby zamiast tego wywołać metodę taką jak obj.setFoo(X)
.
Duplikat, zobacz http://stackoverflow.com/questions/534375/passing-values-in-python –