Python中将字典加入列表引出的一个疑问

it2026-04-15  1

dict在Python里是object,不属于primitive type(即int、float、string、None、bool)。这意味着你一般操控的是一个指向object(对象)的指针,而非object本身,所以dict的ID不会变化。同时,dict的两种赋值方式,也对dict的ID产生影响:    dict["key"]=value     dict={"key":value}

使用dict["key"]=value方式赋值时

情况一:

有如下代码:

list_01 = [] dict_01 = {} for i in range(5): dict_01["num"] = i list_01.append(dict_01) print('字典ID为:',id(dict_01)) print("list_01内容为:\n", list_01)

其结果为:

字典ID为: 2076921129000 字典ID为: 2076921129000 字典ID为: 2076921129000 字典ID为: 2076921129000 字典ID为: 2076921129000 list_01内容为: [{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]

在此情况下,dict的ID不变。

情况二:

对上面的代码进行简单改动,将字典定义到for循环内:

list_01 = [] # dict_01 = {} for i in range(5): dict_01 = {} dict_01["num"] = i list_01.append(dict_01) print('字典ID为:',id(dict_01)) print('list_01内容最终为:\n',list_01)

运行结果为:

字典ID为: 1755302422568 字典ID为: 1755302422640 字典ID为: 1755302423000 字典ID为: 1755302423216 字典ID为: 1755302422712 list_01内容最终为: [{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]

使用dict={"key":value}方式赋值时

无论将dict定义在循环内

list_01 = [] for i in range(5): dict_01 = {} dict_01 = {'num': i} print('字典ID为:',id(dict_01)) list_01.append(dict_01) print("list_01内容为:\n", list_01)

还是将dict定义在循环外

list_01 = [] dict_01 = {} for i in range(5): dict_01 = {'num': i} print('字典ID为:',id(dict_01)) list_01.append(dict_01) print("list_01内容为:\n", list_01)

字典ID均会变化:

字典ID为: 2120832084080 字典ID为: 2120832084440 字典ID为: 2120832084656 字典ID为: 2120832084152 字典ID为: 2120833462344 list_01内容为: [{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]

知乎中有相关问题的解释:https://www.zhihu.com/question/40283828

参考链接:https://blog.csdn.net/weixin_44600138/article/details/104183920

最新回复(0)