python 可变数据类型循环内追加字典数据到列表,列表数据里的字典元素都一样

代码

a = {'a':1}

b = []

for i in range(1,10):
    b.append(a)
    a['a']=i
    print(a)
print(b)

运行结果

{'a': 1}
{'a': 2}
{'a': 3}
{'a': 4}
{'a': 5}
{'a': 6}
{'a': 7}
{'a': 8}
{'a': 9}
[{'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}, {'a': 9}]

python中,字典是可变类型数据,而列表里所添加的a字典数据,其实是一种引用,引用该字典数据的内存地址。而当对字典数据进行修改操作时,因为列表中数据都是来自同一个内存地址,所以,列表中每个元素都是同一个内存地址,也就是内容都是相同的。
那如何添加字典数据到列表,避免这种情况呢?
在python中,每次创建可变类型数据时,即使内容一样,内存地址也不相同,内存地址都是不相同

dir = {"a":1}

print(id(dir))

dir = {"a":1}


print(id(dir))


运行:

1800131259192
1800131752168

这里可以发现,内存地址都是不相同的,所以每次创建字典对象,都会分配一个新的内存地址,所以,代码应该修改为:

b = []

for i in range(1,10):
    a = {'a':1}
    b.append(a)
    a['a']=i
    print(a)
print(b)

运行:

{'a': 1}
{'a': 2}
{'a': 3}
{'a': 4}
{'a': 5}
{'a': 6}
{'a': 7}
{'a': 8}
{'a': 9}
[{'a': 1}, {'a': 2}, {'a': 3}, {'a': 4}, {'a': 5}, {'a': 6}, {'a': 7}, {'a': 8}, {'a': 9}]

我们会发现,把a = {‘a’:1}放在for循环里面后,列表中的数据不再重复,说明不是同一个内存地址了,因为每次运行到a = {‘a’:1}都会重新分配一个与之前不一样的内存地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值