Python中关于序列化和反序列化的问题

用 pickle load 一个 4G 多大小的文件,读到内存中有 20 多个 G,直接内存溢出,崩掉了,这是怎么回事啊,是因为 python 中本身数据结构的问题还是什么原因啊


Python中关于序列化和反序列化的问题
2 回复

在Python里,序列化就是把内存里的对象(比如字典、列表)转成可以存盘或网络传输的格式(通常是字节流),反序列化就是反过来。最常用的就是picklejson这两个模块。

pickle是Python自带的,能处理几乎所有Python对象(包括自定义的类),但它是Python特有的,不安全,不能跨语言。

import pickle

data = {'name': 'Alice', 'age': 30, 'tags': ['python', 'dev']}
# 序列化
pickled_data = pickle.dumps(data)
print(pickled_data)  # 一堆字节

# 反序列化
loaded_data = pickle.loads(pickled_data)
print(loaded_data)  # {'name': 'Alice', ...}

json是跨语言的文本格式,只能处理基本类型(字典、列表、字符串、数字等),不能直接处理Python特有对象(如datetime、自定义类实例)。

import json

data = {'name': 'Bob', 'score': 95.5}
# 序列化
json_str = json.dumps(data)
print(json_str)  # '{"name": "Bob", "score": 95.5}'

# 反序列化
parsed_data = json.loads(json_str)
print(parsed_data['score'])  # 95.5

简单来说,只在Python程序之间传数据用pickle,要跟其他语言交互或者给人看就用json


跪求大佬解惑

回到顶部