2 svar
107 visningar
wangster 116
Postad: 9 sep 2023 23:39

samma id

varför får jag samma output vid följande kod

 

a = "sträng"
c = "sträng"
print(id(a))
print(id(c))

 

Jag hade för mig att jag bara får samma output om jag skriver 

c = a

Jag får samma output när jag skriver tal istället för strängar också. Nån som vet varför?

CurtJ 1201
Postad: 10 sep 2023 04:05

En sträng i python är vad man kalla oföränderlig (immutable) vilket innebär att när den en gång är skapad går den inte att ändra. Tilldelar du den ett nytt värde så skapas en ny instans av strängen i minnet och får ett nytt id (testa). Tilldelar du den samma värde så gissar jag att Python inser det och inte gör en ny variabel (testa det också)

I ditt fall har du två strängvariabler och eftersom de innehåller samma sträng så optimerar Python genom att bara skapa en instans i minnet och låta båda variablerna peka på samma instans.  Testa genom att initiera den ena strängen med t ex 'sträng1' så får den ett annat id.

Jag tror att man kan få olika beteenden i olika Pythonmiljöer, just det här beteendet är nog inte specat i språkspecifikationen. 

CurtJ 1201
Postad: 10 sep 2023 08:12

Heltal får unika id MEN heltal mellan -5 och 256 har alltid samma id. Det är också en optimering för att inte behöva allokera minne för dessa, vanligen använda, tal. Det kan du också testa

b=256
print(id(b))

print (id(256))
Svara
Close