说到使用Python语言,我还是个新手.我想知道为什么当有人使用变量引用某个条目时,使用关键字del从词典中删除该条目是不可能的.似乎del关键字只有在使用方括号格式时才有效,即del dictionary[key]为什么会这样?在回答问题时,我提供了一个代码片段来帮助理解我的问题和指导(不要忘记提到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
>>> del first_name
>>> personal_details
{'f_name': 'Imani', 'l_name': 'Ritcher', 'age': 25}
>>> first_name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'first_name' is not defined
>>> del personal_details['f_name']
>>> personal_details
{'l_name': 'Ritcher', 'age': 25}
>>> 

推荐答案

从技术上讲,Python变量中的tl;tr是对对象的引用,而不是对象本身.

当您创建first_name(first_name = personal_details['f_name'])时,您不是在创建任何新对象,而是在已有对象(即字符串Imani)的基础上创建reference.因为personal_detailsdict中的f_name元素也是对Imani的引用,所以在赋值之后,first_namepersonal_details['f_name']都指向内存中的同一对象.这就是id()为这两个变量返回相同值的原因.

删除则相反.使用del不会删除任何对象,但它也会删除之前创建的引用.但目标对象保持不受影响,这就是为什么您可以安全地删除,即first_name和dict元素不受影响(反之亦然),即使它们指向相同的对象.最后,当您删除这两个引用时,Imani将成为孤儿,然后它将在某个时刻被Python垃圾回收.

Python相关问答推荐

在Python中,如何初始化集合列表脚本的输出

仅对matplotlib的条标签中的一个条标签应用不同的格式

避免循环的最佳方法

Polars Dataframe:如何按组删除交替行?

Python panda拆分列保持连续多行

将HLS纳入媒体包

分组数据并删除重复数据

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

Pandas 填充条件是另一列

根据不同列的值在收件箱中移动数据

标题:如何在Python中使用嵌套饼图可视化分层数据?

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

在Python中管理打开对话框

如何使用pytest来查看Python中是否存在class attribution属性?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

给定高度约束的旋转角解析求解

跳过嵌套JSON中的级别并转换为Pandas Rame

合并与拼接并举

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "