Quantcast
Channel: How do I clone a list so that it doesn't change unexpectedly after assignment? - Stack Overflow
Viewing all articles
Browse latest Browse all 117

Answer by B.Mr.W. for List changes unexpectedly after assignment. Why is this and how can I prevent it?

$
0
0

A slight practical perspective to look into memory through id and gc.

>>> b = a = ['hell', 'word']>>> c = ['hell', 'word']>>> id(a), id(b), id(c)(4424020872, 4424020872, 4423979272)      |           |      ----------->>> id(a[0]), id(b[0]), id(c[0])(4424018328, 4424018328, 4424018328) # all referring to same 'hell'     |           |           |      ----------------------->>> id(a[0][0]), id(b[0][0]), id(c[0][0])(4422785208, 4422785208, 4422785208) # all referring to same 'h'     |           |           |      ----------------------->>> a[0] += 'o'>>> a,b,c(['hello', 'word'], ['hello', 'word'], ['hell', 'word'])  # b changed too>>> id(a[0]), id(b[0]), id(c[0])(4424018384, 4424018384, 4424018328) # augmented assignment changed a[0],b[0]     |           |      ----------->>> b = a = ['hell', 'word']>>> id(a[0]), id(b[0]), id(c[0])(4424018328, 4424018328, 4424018328) # the same hell     |           |           |      ----------------------->>> import gc>>> gc.get_referrers(a[0]) [['hell', 'word'], ['hell', 'word']]  # one copy belong to a,b, the another for c>>> gc.get_referrers(('hell'))[['hell', 'word'], ['hell', 'word'], ('hell', None)] # ('hello', None) 

Viewing all articles
Browse latest Browse all 117

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>