Python copy values of scalars but addresses of lists
Python allows copying values of a scalar:
a = 42 b = a print(b) # 42 a = 43 print(a) # 43 print(b) # 42
However, the same operator
= doesn’t do the same for lists:
a = [1,2,3] b = a print(b) # [1,2,3] a = 0 print(a) # [1,0,3] print(b) # [1,0,3]
The reason is quite easy to guess. The variable
b for lists are pointers since it is much easier to hold the starting address of the lists and length instead of all the values.
In the case of a copy of a list is really needed, we can use slicing:
a = [1,2,3] b = a[:]
Through this slicing,
b is a copy of
a and all changes of
a have no effect on
Lei Ma (2018). 'Copy Scalars and Lists in Python', Datumorphism, 07 April. Available at: https://datumorphism.leima.is/til/programming/python/python-copy-value-or-address/.