*Memo:
- My post explains a list (1).
- My post explains a list (2).
- My post explains a list (3).
- My post explains a list (4).
- My post explains a list (5).
A list can be changed by slicing and a del statement as shown below:
*Memo:
- Slicing can shallow-copy a list.
- An iterable must be assigned to a sliced variable.
- A
delstatement can remove zero or more elements from a list by slicing and can remove one or more variables themselves.
<1D list>:
v1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
v2 = v1[:]
v2 = v1[-100:100]
v2[-100:100] = v1[:]
v2[2:6] = [0, 1, 2, 3, 4, 5]
# v2[-6:-2] = [0, 1, 2, 3, 4, 5]
print(v2)
# ['A', 'B', 0, 1, 2, 3, 4, 5, 'G', 'H']
v2 = v1[:]
v2[2:6] = [[0, 1, 2, 3, 4, 5]]
# v2[-6:-2] = [[0, 1, 2, 3, 4, 5]]
print(v2)
# ['A', 'B', [0, 1, 2, 3, 4, 5], 'G', 'H']
v2 = v1[:]
v2[2:6:2] = [0, 1]
# v2[-6:-2:2] = [0, 1]
print(v2)
# ['A', 'B', 0, 'D', 1, 'F', 'G', 'H']
v2 = v1[:]
v2[2:6:2] = [[0, 1, 2], [3, 4, 5]]
# v2[-6:-2:2] = [[0, 1, 2], [3, 4, 5]]
print(v2)
# ['A', 'B', [0, 1, 2], 'D', [3, 4, 5], 'F', 'G', 'H']
v2 = v1[:]
v2[2:2] = []
# v2[-6:-6] = []
print(v2)
# ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
v2 = v1[:]
v2[2:6] = 0
v2[-6:-2] = 0
# TypeError: must assign iterable to extended slice
v1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
v2 = v1[:]
del v2[:], v2[-100:100]
print(v2)
# []
v2 = v1[:]
del v2[2:6]
# del v2[-6:-2]
print(v2)
# ['A', 'B', 'G', 'H']
v2 = v1[:]
del v2[2:6:2]
# del v2[-6:-2:2]
print(v2)
# ['A', 'B', 'D', 'F', 'G', 'H']
v2 = v1[:]
del v2[2:2]
# del v2[-6:-6]
print(v1)
# ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
del v1, v2
print(v1)
# NameError: name 'v1' is not defined
print(v2)
# NameError: name 'v2' is not defined
<2D list>:
v = [['A', 'B', 'C', 'D'], ['E', 'F', 'G', 'H']]
v[0][1:3] = [0, 1, 2, 3]
# v[-2][-3:-1] = [0, 1, 2, 3]
print(v)
# [['A', 0, 1, 2, 3, 'D'], ['E', 'F', 'G', 'H']]
v[1][::2] = [0, 1]
# v[-1][::2] = [0, 1]
print(v)
# [['A', 0, 1, 2, 3, 'D'], [0, 'F', 1, 'H']]
v[0][1::3] = [[0, 1, 2, 3], [0, 1, 2, 3]]
# v[-2][-5::3] = [[0, 1, 2, 3], [0, 1, 2, 3]]
print(v)
# [['A', [0, 1, 2, 3], 1, 2, [0, 1, 2, 3], 'D'], [0, 'F', 1, 'H']]
v[1][1:3] = [[0, 1, 2, 3]]
# v[-1][-3:-1] = [[0, 1, 2, 3]]
# v[0][1:3], v[1][::2], v[0][1::3], v[1][1:3] = \
# [0, 1, 2, 3], [0, 1], [[0, 1, 2, 3], [0, 1, 2, 3]], [[0, 1, 2, 3]]
# v[-2][-3:-1], v[-1][::2], v[-2][-5::3], v[-1][-3:-1] = \
# [0, 1, 2, 3], [0, 1], [[0, 1, 2, 3], [0, 1, 2, 3]], [[0, 1, 2, 3]]
print(v)
# [['A', [0, 1, 2, 3], 1, 2, [0, 1, 2, 3], 'D'], [0, [0, 1, 2, 3], 'H']]
del v[0][:3], v[1][::2]
# del v[-2][:-3], v[-1][::2]
print(v)
# [[2, [0, 1, 2, 3], 'D'], [[0, 1, 2, 3]]]
<3D list>:
v = [[['A', 'B'], ['C', 'D']], [['E', 'F'], ['G', 'H']]]
v[0][1:] = [0, 1, 2, 3]
# v[-2][-1:] = [0, 1, 2, 3]
print(v)
# [[['A', 'B'], 0, 1, 2, 3], [['E', 'F'], ['G', 'H']]]
v[1][0][0:] = [0, 1, 2, 3]
# v[-1][-2][-2:] = [0, 1, 2, 3]
print(v)
# [[['A', 'B'], 0, 1, 2, 3], [[0, 1, 2, 3], ['G', 'H']]]
v[1][1][::2] = [[0, 1, 2, 3]]
# v[-1][-1][::2] = [[0, 1, 2, 3]]
# v[0][1:], v[1][0][0:], v[1][1][::2] = \
# [0, 1, 2, 3], [0, 1, 2, 3], [[0, 1, 2, 3]]
# v[-2][-1:], v[-1][-2][-2:], v[-1][-1][::2] = \
# [0, 1, 2, 3], [0, 1, 2, 3], [[0, 1, 2, 3]]
print(v)
# [[['A', 'B'], 0, 1, 2, 3], [[0, 1, 2, 3], [[0, 1, 2, 3], 'H']]]
del v[0][1:], v[1][0][0:], v[1][1][::2]
# del v[-2][-4:], v[-1][-2][-4:], v[-1][-1][::2]
print(v)
# [[['A', 'B']], [[], ['H']]]
A list can be continuously used through multiple variables as shown below:
v1 = v2 = v3 = ['a', 'b', 'c', 'd', 'e'] # Equivalent
# v1 = ['a', 'b', 'c', 'd', 'e']
v1[0] = 'X' # v2 = v1
v2[3:5] = ['Y', 'Z'] # v3 = v2
del v3[1:3]
print(v1) # ['X', 'Y', 'Z']
print(v2) # ['X', 'Y', 'Z']
print(v3) # ['X', 'Y', 'Z']
A list can be shallow-copied and deep-copied as shown below:
<Shallow copy>:
*Memo:
-
v1andv2refer to different outer lists and the same inner list. -
iskeyword can check ifv1andv2refer to the same outer and inner list. -
list.copy(), copy.copy(), list() and slicing can shallow-copy a list:
-
list.copy()has no arguments.
-
import copy
v1 = ['a', 'b', ['c', 'd']]
v2 = v1.copy()
v2 = copy.copy(v1)
v2 = list(v1)
v2 = v1[:]
print(v1) # ['a', 'b', ['c', 'd']]
print(v2) # ['a', 'b', ['c', 'd']]
print(v1 is v2, v1[2] is v2[2])
# False True
v2[1] = 'X'
v2[2][0] = 'Y'
# ↓↓↓ ↓↓↓
print(v1) # ['a', 'b', ['Y', 'd']]
print(v2) # ['a', 'X', ['Y', 'd']]
# ↑↑↑ ↑↑↑
<Deep copy>:
*Memo:
-
v1andv2refer to different outer and inner lists. - copy.deepcopy() deep-copies a list.
-
copy.deepcopy()should be used because it's safe, deeply copying a list whilelist.copy(),copy.copy(),list()and slicing aren't safe, shallowly copying a list.
import copy
v1 = ['a', 'b', ['c', 'd']]
v2 = copy.deepcopy(v1)
print(v1) # ['a', 'b', ['c', 'd']]
print(v2) # ['a', 'b', ['c', 'd']]
print(v1 is v2, v1[2] is v2[2])
# False False
v2[1] = 'X'
v2[2][0] = 'Y'
# ↓↓↓ ↓↓↓
print(v1) # ['a', 'b', ['c', 'd']]
print(v2) # ['a', 'X', ['Y', 'd']]
# ↑↑↑ ↑↑↑
Top comments (0)