Python ID Mystery | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 4

Python ID Mystery

I have stumbled upon something surprising. Does anybody know what's going on here? (Details in code.) https://code.sololearn.com/ceg91PiC9O0H/?ref=app

5th Nov 2019, 3:27 PM
HonFu
HonFu - avatar
3 Answers
+ 4
HonFu For mutable types: id( [ ] ) == id( [ ] ) #true id( [5,2,1] ) == id ( [5,2,1] ) #true a = [] id( a ) == id ( [ ] ) # false For inmutable types it's like Mirielle🐶 [Inactive] said: a = 6 id( a ) == id( 6 ) #true
5th Nov 2019, 4:27 PM
Kevin ★
+ 2
It allows it for immutable types like int or string, but according to the specification, mutable types are treated differently. Look at part 3 and part 4 of my ecample again: In part 3, two individual lists are created, and obviously they have different IDs, the test confirms it. In part 4, logically, the ids of two individual lists would have to be stored - but it is two times the same.
5th Nov 2019, 4:01 PM
HonFu
HonFu - avatar
+ 2
Yeah, Kevin, but that much became obvious in the code already. (And immutables weren't the topic in the first place.) The question is why? The two lists, that are created, are created one by one, left to right, and they're mutable, so they should get different IDs, and after the IDs have been identified, the garbage collector should get rid of both. But it does not seem to play out like that... Somehow the procedure must be different.
5th Nov 2019, 4:32 PM
HonFu
HonFu - avatar