1、字典:是python数据类型之一,字典通过花括号来包含数据项,字典的每个元素由2个部分组成,键:值,字典是根据键来找对应的值。

data = {"name": "Ethon", "age": 12, "address": "Shen zhen"}

2、字典的特点

  • 字典与列表、集合一样,都是属于可变数据类型

  • 字典和列表一样,也能够存储多个数据

  • 键对象具有唯一性,因此只有不可变数据类型(数字,字符串和元组)才能作为键键对象

  • 值对象可以为python的任意数据类型

3、字典的内存分布

data = {"name": "Ethon", "age": 12, "address": "Shen zhen"}
print(data) # {'name': 'Ethon', 'age': 12, 'address': 'Shen zhen'}

 4、字典底层原理

字典对象的核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做 bucket。每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用。由于所有 bucket 结构和大小一致,我们可以通过偏移量来读取指定 bucket。

4.1、键值的存储过程

data = {}
data["name"] = "Ethon"
data["age"] = 12
data["address"] = "Shen zhen"
print(bin(hash("name")))
# -0b110101010110011100010010100000011000110000001101000100000111101
print(bin(hash("age")))
# 0b1001111110011010111111111010000010110010101000011000011100
print(bin(hash("address")))
# 0b100011011010010101010010100001110110010101001101100010000110011

1.首先要计算data["name"]的散列值

2.得到hash值后,我们从hash值最右边3位数字作为偏离量,即"101"

3.我们查看偏移量"101" 对应的bucket是否为空,如果为空,则将键值对放进去

4.如果不为空,则依次去右边3位作为偏离量,即111"

5.再看偏离量"111" 对应的bucket是否为空,直到找到为空的bucket将键值对放进去。

4.2、字典查找值的过程

1.我们要计算data["name"] 里面的"name"对象

2.确定偏离量,散列值的最右边3位数字作为偏离量 "101"

3.查看偏离量"101"对应的bucket是否为空,如果为空,则返回None

4.如果不为空,则将这个bucket的键对象计算出对应的散列值和data["name"]的"name"散列值进行比较,如果两个散列值相等,则将对应数组里的值对象返回,如果不相等,则再依次取其他几位数字,重新计算偏离量。依次取完,仍然没有找到,则返回None。

Python学习4(字典的内存分布)的更多相关文章

  1. python学习10字典

    '''''''''字典(Dict)是python语言的一个最大的特征1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型2.表示:{} 列表:[] 元组 () 字符串 ‘’ “” ‘‘ ...

  2. python学习:字典

    字典 1.查询内存地址 a = 10 print(id(a)) b = a print(id(b)) b = 15 print(id(b)) 2. 数据类型 不可变类型:整型.字符串.元组 可变类型: ...

  3. Python学习笔记(字典)

    今天学习一个python中的基本类型--字典(dictionary) 字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息.在字典中,名字叫做“键”,对应的内容信息叫做“值”.字典 ...

  4. python学习09——字典(3)

    今天写了一道python字典题目,用了上次字典(2)中的方法,代码如下: json = {', 'IP':'10.0.0.1'} def find_value(themap, word): if wo ...

  5. Python学习07——字典(2)

    笨办法学Python第40节,上次用的第三版的书,这次是第四版的书. 这一节的代码如下: cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'J ...

  6. python学习05——字典

    笨办法学python第39节 这节主要讲解的是字典,首先字典和列表的两个区别是: 1. 列表中可以通过数字找到列表中的元素,是数字作为索引的:字典中可以通过任何东西找到想要的元素,即字典可以将一个物件 ...

  7. Python学习笔记-字典

    字典是python中唯一内建的映射类型. 创建字典phonebook = {'Alice':'2341','Beth':'9102'} 可以使用dict通过其他映射或者键值对的序列建立字典.关键值参数 ...

  8. Python学习之字典详解

    在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在c++中有map的概念,也就是映射,在python中也提供了内置的映射类型--字典.映射其实就是一组key ...

  9. python学习:字典排序

    按字典值排序   按照字典value排序,类似sort -k 命令   import operator x= {1:2,3:4,4:3,2:1,0:0} sorted_x = sorted(x.ite ...

随机推荐

  1. Spring IoC 的实现机制?

    Spring 中的 IoC 的实现原理就是工厂模式加反射机制. 示例: interface Fruit { public abstract void eat(); } class Apple impl ...

  2. C++ 虚继承实现原理(虚基类表指针与虚基类表)

    虚继承和虚函数是完全无相关的两个概念. 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝.这将存在两个问题:其一,浪费存储空间:第二,存在二义性问题,通常可 ...

  3. java中instanceof是怎么用的, 干什么使的,举例!

    instanceof关键字 instanceof是java中固有的关键字, 就像main, public一样,用法:aa instanceof AA 就是问aa是不是AA的一个实例, 是的话,就返回真 ...

  4. spring security简介与使用

    目录 spring security 新建一个springboot项目 添加spring security 登录 使用默认用户和随机生成的密码登录 使用yaml文件定义的用户名.密码登录 使用代码中指 ...

  5. C语言---魔方阵

    魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...

  6. python---使用pipreqs及遇到的问题

    pipreqs简介 ​ 项目开发的过程中, 避免不了搭建和部署开发环境, 而搭建和部署开发环境需要项目依赖的python第三方包, 如何获取一个项目中所需依赖的python第三方包, 这就需要使用pi ...

  7. 企业需要使用网络损伤仪 WANsim 的帮助,以便更高效地迁移到云端

    正确解决与云环境中的应用程序部署有关的问题需要针对每个系统的独特需求以寻找特定的网络工具.网络损伤仪 WANsim 助力企业更高效地迁移到云端! 起初,云厂商以在云端办公相对于传统方式拥有更高的可靠性 ...

  8. Jenkins+gitlab手动部署

    环境: Jenkins:172.16.88.221 (安装Jenkins和git命令) gitlab:172.16.88.221 (安装gitlab) 远程部署机器:172.16.88.220 (安装 ...

  9. 小程序已成为超级APP必选项,逐鹿私域“留量”

    截止2021年底,中国移动互联网月活跃用规模达到11.74亿人,增速逐渐呈放缓趋势,用户渗透率接近天花板.客户的增长速度越趋于平缓,品牌在不同成长阶段也要适应增长节奏的变化,越来越多主流商家不得不利用 ...

  10. Java学习——数组的基础知识

    数组的特点.分类:一维.二维数组的使用:数组的声明和初始化.调用数组的指定位置的元素.获取数组的长度.遍历数组.数组元素的默认初始化值