Python 3中del删除字典无效?删除后类型变为type的原因
为什么Python 3里del删不掉字典还变了类型?
兄弟,你这绝对是踩了变量名和内置类型重名的坑!我给你把来龙去脉掰扯清楚:
核心问题:你把变量名取成dict了
Python里dict本身就是内置的字典类型(本质是个type对象),如果你的代码是这样的:
dict = {"name": "liang li"} # 这里你用自己的字典实例覆盖了内置的dict类型 print(type(dict)) # 此时输出 <class 'dict'>,变量dict指向你创建的字典 del dict # 你删除的只是自己定义的这个变量引用 print(type(dict)) # 原来被覆盖的内置dict类型重新暴露,所以输出 <class 'type'>
为啥del没"删掉字典"?
- 首先,
del语句删除的是变量引用,不是字典对象本身。只有当字典对象没有任何引用时,Python的垃圾回收机制才会真正销毁它。 - 更关键的是:你删的是自己定义的
dict变量,原来的内置dict类型只是被暂时覆盖了,当你删掉自定义的变量后,内置类型就又"冒出来"了,所以你看到的类型变成了type。
怎么避免这种混乱?
- 绝对不要用Python的内置名称当变量名,比如
dict、list、str这些,不然会覆盖内置类型,引发各种诡异问题。 - 给你的字典换个有意义的变量名,比如
my_dict、user_profile,就不会出现这种乌龙了。
举个正确的例子:
my_dict = {"name": "liang li"} print(type(my_dict)) # 输出 <class 'dict'> del my_dict # 这时候再访问my_dict会直接报NameError,因为变量已经被删除,不会再混淆内置类型
内容的提问来源于stack exchange,提问作者liang li
相关产品推荐
相关产品推荐

