%reset是最直接有效的清空方式,执行%reset -f可强制清除jupyter当前内核中所有变量(不含内置名称),但不释放pytorch gpu显存,需配合torch.cuda.empty_cache()使用;globals().clear()会破坏运行环境,应禁用。

%reset 是最直接有效的清空方式
在 Jupyter Notebook 中执行 %reset 即可清空当前内核中所有变量(不含内置名称如 __name__、__doc__ 等)。它本质是调用 IPython 的清理机制,比手动 del 或修改 globals() 更安全可靠。
- 运行后会提示确认,输入
y回车才真正执行;加-f参数可跳过确认:%reset -f - 不会影响已导入的模块(如
import numpy as np仍可用),但会删掉你基于这些模块创建的所有变量(如a = np.array([1,2])) - 不清理魔法函数、自定义类定义或函数对象本身——只清变量引用。比如你定义了
def foo(): pass,foo这个名字还在,但foo()调用前若没重新赋值参数变量,会报NameError
globals().clear() 会破坏环境,慎用
虽然 globals().clear() 看似彻底,但它会把 Python 内置函数(如 print、len)、模块引用(如 sys、os)甚至 IPython 自身的运行时对象一并删除。执行后你将无法再运行任何代码,连 print 都报错。
- 常见错误现象:
NameError: name 'print' is not defined,甚至%reset都失效,因为魔法命令依赖的 IPython 对象也被清掉了 - 恢复唯一办法是重启内核(Kernel → Restart),但此时所有未保存的状态(包括 PyTorch 模型、训练中间状态)全丢
- 仅在极特殊调试场景下、且明确知道后果时才考虑,日常开发中应视为禁用操作
PyTorch 用户必须注意:%reset 不释放 GPU 显存
%reset 只清理 Python 对象引用,但 PyTorch 张量若已分配到 CUDA 设备上,其显存不会自动回收——除非对应张量被垃圾回收器真正释放,或显式调用 torch.cuda.empty_cache()。
- 典型问题:执行
%reset后再运行model = MyNet().to('cuda'),发现显存占用没降,甚至 OOM - 正确做法是紧接
%reset -f后执行:torch.cuda.empty_cache() - 如果模型还持有优化器、数据加载器等强引用,建议先
del model, optimizer, dataloader再%reset,否则 GC 可能延迟触发
需要彻底重置?重启内核比清变量更可靠
当遇到模块重载冲突、C extension 状态异常、或 PyTorch CUDA 上下文卡死时,%reset 已不够用。此时必须重启内核——它会终止整个 Python 进程,释放全部 CPU 内存和 GPU 显存。
- 快捷键:Ctrl+M(进入命令模式)→ 0,0(连续按两次 0)
- 注意:重启后所有变量、函数、类定义、模块导入全部丢失,未保存的 notebook 单元不会受影响,但运行态对象不可恢复
- 深度学习实验中,务必在关键节点调用
torch.save(model.state_dict(), 'ckpt.pth'),否则重启等于白训











