Copy Scalars and Lists in Python
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[1] = 0
print(a)
# [1,0,3]
print(b)
# [1,0,3]
The reason is quite easy to guess. The variable a and 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 b.
Planted:
by Lei Ma;
Similar Articles:
L 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/.