dict在Python里是object,不属于primitive type(即int、float、string、None、bool)。这意味着你一般操控的是一个指向object(对象)的指针,而非object本身,所以dict的ID不会变化。同时,dict的两种赋值方式,也对dict的ID产生影响: 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定义在循环内
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
