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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值