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
CSDN参考链接:https://blog.csdn.net/weixin_44600138/article/details/104183920