Python内存变量访问:脚本调试时大列表复用与代码修改的两难求解
解决Python大列表复用与代码修改的调试方案
方法一:用IPython的魔法命令实现内存复用与代码热更新
- 安装IPython:
sudo apt install ipython3 - 启动IPython控制台,执行
%run your_script.py运行脚本,此时生成的mylist会保留在内存中,直接执行print(mylist[0][0]['key'])这类查询无需重新生成列表 - 修改脚本中的列表生成逻辑后,无需重启IPython:
- 如果列表是通过模块中的函数生成,重新加载模块:
import importlib; importlib.reload(your_module),再调用函数生成新列表 - 如果是脚本内的函数,直接在IPython里重新定义该函数,即可用新逻辑生成列表,旧的
mylist仍可随时调用
- 如果列表是通过模块中的函数生成,重新加载模块:
方法二:用Pickle序列化保存大列表
- 在脚本生成
mylist后添加保存逻辑:import pickle # 生成mylist的代码执行完成后 with open('mylist_cache.pkl', 'wb') as f: pickle.dump(mylist, f) - 调试时跳过列表生成步骤,直接加载缓存:
import pickle with open('mylist_cache.pkl', 'rb') as f: mylist = pickle.load(f) - 修改列表生成逻辑后,重新运行脚本生成新列表并覆盖缓存文件,或者重命名旧缓存(如
mylist_cache_v1.pkl)留存对比
方法三:用增强版调试器PDBPP保存会话
- 安装PDBPP:
pip install pdbpp - 在脚本末尾添加断点:
import pdb; pdb.set_trace(),运行脚本后,生成mylist会进入调试会话,可直接查询列表元素 - 在调试会话中输入
save my_session.pdb保存当前内存状态,退出后下次启动时执行python -m pdb -c my_session.pdb your_script.py,即可恢复之前的会话状态,修改代码后可重新执行相关逻辑
内容的提问来源于stack exchange,提问作者Andyc
相关产品推荐
相关产品推荐

