01-Lists
Một số chú ý về Lists trong Python
1. List có phải là array không?
- Trước đây mình hay cho rằng
listtrong Python chính làarray, nhưng thực ra không phải như vậy. - Các phần tử trong
listcó kiểu dữ liệudata typecó thể không giống nhau.
Shell
>>> a = [3.2, 'hello', [4, 7, 17.1]]
>>> print(a)
[3.2, 'hello', [4, 7, 17.1]]
>>> type(a)
<class 'list'>
>>>2. Copy một list
Shell
>>> a = [1, 2, 3]
>>> b = a
>>> print(a, b)
[1, 2, 3] [1, 2, 3]
>>> b.sort(reverse = True)
>>> print(a, b)
[3, 2, 1] [3, 2, 1]
>>>- Thật thú vị, gán biến b = a, thì Python không clone data ra mà trỏ luôn vùng nhớ của a cho b.
- Sau khi search google thì mình mới biết đến
shallow copyvàdeep copy
2.1 Shallow copy
Shell
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> print(a, b)
[1, 2, 3] [1, 2, 3]
>>> b.sort(reverse = True)
>>> print(a, b)
[1, 2, 3] [3, 2, 1]
>>>Important
- Chỉ đơn giản là dùng hàm
copyđể clone data - Cách khác là dùng
slicingđể copy data
Shell
>>> c = a[0:1]
>>> print(a, c)
[1, 2, 3] [1]
>>> a.sort(reverse = True)
>>> print(a, c)
[3, 2, 1] [1]
>>>2.2 Deep copy
Important
Dùng cho nested lists để chắc chắc rằng tất cả các phần tử trong các đối tượng bên trong list đều được copy và độc lập
Shell
>>> a = [1, 2, 3, [5, 6, 7], [11, 12, 15]]
>>> print(a)
[1, 2, 3, [5, 6, 7], [11, 12, 15]]
>>> import copy
>>> deep_copy = copy.deepcopy(a)
>>> print(deep_copy)
[1, 2, 3, [5, 6, 7], [11, 12, 15]]
>>> a[1] = 100
>>> print(a)
[1, 100, 3, [5, 6, 7], [11, 12, 15]]
>>> print(deep_copy)
[1, 2, 3, [5, 6, 7], [11, 12, 15]]
>>>