Serialization và deserialization là khía cạnh thường gặp trong chương trình Python không tầm thường. Lưu file, đọc config, xử lý HTTP request đều liên quan đến serialization.
Có nhiều scheme, format, protocol để stream object Python và khôi phục lại. Lựa chọn ảnh hưởng đến tốc độ và bảo mật.
Ví dụ với pickle
import pickle
foo = dict(
int_list=[3, 4, 5],
text='Hello World',
number=9.99,
boolean=False,
none=None
)
# Serialize thành bytes
pickled = pickle.dumps(foo)
print(pickled)
# Sử dụng protocol cao nhất (hiệu quả hơn)
pickled_high = pickle.dumps(foo, protocol=pickle.HIGHEST_PROTOCOL)
print(pickled_high)
# Deserialize
restored = pickle.loads(pickled)
print(restored)
Lưu ý quan trọng
- Bảo mật:
picklekhông an toàn với dữ liệu không tin cậy (có thể thực thi code tùy ý). Chỉ dùng với dữ liệu tin cậy. - Thay thế an toàn: JSON (
json), MessagePack, hoặcmarshalcho dữ liệu đơn giản. - Class cũng là object Python, có thể pickle được (miễn là class có thể import được khi unpickle).