Python: Copy Nested List, Shallow/Deep Copy

By Xah Lee. Date: . Last updated: .

Copying List by Reference

If you do this list_a = list_b, that'll copy a reference. That means: modifying one list also modifies the other.

# python 3

list_a = [3, 4, 5]
list_b = list_a
list_a[0] = 7
print(list_b )
# [7, 4, 5]

Check Equality of 2 Objects

You can check by using the “id” function. The id(obj) returns the object's memory address.

# python 3

aa = [3, 4, 5]
bb = aa

print(id(aa))
# 4477411144

print(id(aa) == id(bb))
# True

Copy Flat List Using List Slice

You can make a copy by list_b = list_a[:]. When the first index are omitted, it default to 0. When the ending index is omitted, it default to length of the list.

# python 3

list_a = [3,4,5]
list_b = list_a[:]

print(id(list_a) == id(list_b))
# False

print(list_a == list_b)
# True

Copy Flat List Using 「.extend()」

# python 3

list_a = [3, 4, 5]
list_b = []
list_b.extend(list_a)

print(id(list_a) == id(list_b))
# False

print(list_a == list_b)
# True

Copy Flat List Using 「list()」

The best way to copy flat list is

lst2 = list(lst)

# python 3

list_a = [3, 4, 5]
list_b = list(list_a)

print(id(list_a) == id(list_b))
# False

print(list_a == list_b)
# True

Copying Nested List, Deep Copy

Use the module “copy” to make a truely independent copy of a list.

# python 3

import copy

list_a = [[3, 4], [5, 6, [7, 8]]]
list_b = copy.deepcopy(list_a)

list_a[0][1] = 9

print(list_a)
# [[3, 9], [5, 6, [7, 8]]]

print(list_b)
# [[3, 4], [5, 6, [7, 8]]]

What's Shallow Copy?

All the following only does shallow copy:

They only create a copy on the 0th level. That's called shallow copy. The elements of a nested element are copied by reference.

# python 3

# example of shallow copy. Changing a nested element still effect the original list

aa = [[3, 6], [5, [8]]]
bb = list(aa)

aa[0][1] = 9

print(aa)
# [[3, 9], [5, [8]]]

print(bb)
# [[3, 9], [5, [8]]]

See also: Python: dict={} vs dict.clear() .

Python List, Tuple, Dictionary

Python

Regex

Text Processing

Web

Misc