鱼C论坛

 找回密码
 立即注册
查看: 3794|回复: 2

[已解决]关于Python字典的一些疑惑!

[复制链接]
发表于 2017-4-18 16:23:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
TTSQ9I7Z00NYCU9DGX2BX@S.png

在创建dic和dic2时 键1和1.0都只取了一个且都是写在前面的,而value都是取得后面的  这是Python的规定吗?
看小甲鱼的扩展 相同的键的哈希函数求得的应该是一样的  dic[1]和dic2[1]的地址和数据都是一样的,而dic1[1]则不同,为什么?
难道创建一个字典取key值还要判断其他字典是否取了这个值了吗?如果不是,那是不是每个字典都要自己的哈希函数 ,
要不然算出来的地址一样,一改不全变了?

最佳答案
2017-4-18 17:55:46
因为你的key值实际都是1,后边的会覆盖前边的值,所以都取后边的,你可以用len函数看下,实际dic与dic1都只有2个元素
dic[1]和dic2[1]因为key和value都是一致的,为了节省内存,所以将其分配到同一块地址上,dic1[1]值不一样那肯定不用同一块内存
而当你修改了一个key的value之后,将会自动在内存中重新创建一份控件存储改变的key和value并不会改变到原本的
比如你的程序 id(dic[1])与id(dic[2])都是30389840
当你修改了dic[1]的值之后,id(dic[1])会是新的值,而id(dic[2])还是30389840
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-18 17:55:46 | 显示全部楼层    本楼为最佳答案   
因为你的key值实际都是1,后边的会覆盖前边的值,所以都取后边的,你可以用len函数看下,实际dic与dic1都只有2个元素
dic[1]和dic2[1]因为key和value都是一致的,为了节省内存,所以将其分配到同一块地址上,dic1[1]值不一样那肯定不用同一块内存
而当你修改了一个key的value之后,将会自动在内存中重新创建一份控件存储改变的key和value并不会改变到原本的
比如你的程序 id(dic[1])与id(dic[2])都是30389840
当你修改了dic[1]的值之后,id(dic[1])会是新的值,而id(dic[2])还是30389840
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-18 21:56:43 | 显示全部楼层
lumber2388779 发表于 2017-4-18 17:55
因为你的key值实际都是1,后边的会覆盖前边的值,所以都取后边的,你可以用len函数看下,实际dic与dic1都只 ...

谢谢!看了之后明白多了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表