Python中为何用del关键字通过变量无法删除字典元素?
为什么通过变量引用字典项执行del无法删除字典元素?
要搞懂这个问题,得先明确Python里id的概念:id()函数返回的是对象在内存中的唯一标识,每个存在的对象都有专属的id,只要对象没被回收,这个id就不会变。
结合你提供的代码来看:
>>> personal_details = {'f_name': 'Imani', 'l_name': 'Ritcher', 'age': 25} >>> first_name = personal_details['f_name'] >>> id(first_name) 139769037520176 >>> id(personal_details['f_name']) 139769037520176
当你执行first_name = personal_details['f_name']时,并没有复制字典里的'Imani'字符串,而是让变量first_name和字典中'f_name'键对应的同一个内存对象建立了引用关系——两个id()结果完全相同,就证明了这一点。
接下来看两种del操作的区别:
del first_name:这个操作删除的是变量first_name本身,也就是切断了这个变量和目标字符串对象的引用关系,但字典里的'f_name'键依然保留着对该字符串对象的引用。所以字典的内容不会有任何变化,只是first_name这个变量被销毁了,后续再调用它就会触发NameError。del personal_details['f_name']:这个操作是直接对字典本身动手,删除的是字典中的'f_name'键值对,相当于切断了字典对该键对应值对象的引用。这时候字典里的元素才会被真正移除,personal_details的内容也就随之更新。
总结一下:del操作的对象是你明确指定的东西——要么是变量,要么是字典的键值对,它不会顺着引用去删除其他地方的关联内容。
内容的提问来源于stack exchange,提问作者user13871283
相关产品推荐
相关产品推荐

