Python学习4(字典的内存分布)
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(字典的内存分布)的更多相关文章
- python学习10字典
'''''''''字典(Dict)是python语言的一个最大的特征1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型2.表示:{} 列表:[] 元组 () 字符串 ‘’ “” ‘‘ ...
- python学习:字典
字典 1.查询内存地址 a = 10 print(id(a)) b = a print(id(b)) b = 15 print(id(b)) 2. 数据类型 不可变类型:整型.字符串.元组 可变类型: ...
- Python学习笔记(字典)
今天学习一个python中的基本类型--字典(dictionary) 字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息.在字典中,名字叫做“键”,对应的内容信息叫做“值”.字典 ...
- python学习09——字典(3)
今天写了一道python字典题目,用了上次字典(2)中的方法,代码如下: json = {', 'IP':'10.0.0.1'} def find_value(themap, word): if wo ...
- Python学习07——字典(2)
笨办法学Python第40节,上次用的第三版的书,这次是第四版的书. 这一节的代码如下: cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'J ...
- python学习05——字典
笨办法学python第39节 这节主要讲解的是字典,首先字典和列表的两个区别是: 1. 列表中可以通过数字找到列表中的元素,是数字作为索引的:字典中可以通过任何东西找到想要的元素,即字典可以将一个物件 ...
- Python学习笔记-字典
字典是python中唯一内建的映射类型. 创建字典phonebook = {'Alice':'2341','Beth':'9102'} 可以使用dict通过其他映射或者键值对的序列建立字典.关键值参数 ...
- Python学习之字典详解
在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在c++中有map的概念,也就是映射,在python中也提供了内置的映射类型--字典.映射其实就是一组key ...
- python学习:字典排序
按字典值排序 按照字典value排序,类似sort -k 命令 import operator x= {1:2,3:4,4:3,2:1,0:0} sorted_x = sorted(x.ite ...
随机推荐
- java程序如何确保多线程的运行安全?
线程的安全问题体现在: 原子性:一个或多个操作在CPU执行过程中不被中断的特性 可见性:一个线程对共享变量的修改,另一个线程能立刻看到 有序性:程序执行的顺序按照代码的先后顺序执行 导致线程存在安全问 ...
- 什么是 Callable 和 Future?
Callable 接口类似于 Runnable,从名字就可以看出来了,但是 Runnable 不会返 回结果,并且无法抛出返回结果的异常,而 Callable 功能更强大一些,被线程执 行后,可以返回 ...
- Effective Java —— 覆盖equals时遵守通用约定
本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...
- CPU架构:CPU架构详细介绍
1 概述 CPU架构是CPU商给CPU产品定的一个规范,主要目的是为了区分不同类型的CPU.目前市场上的CPU分类主要分有两大阵营,一个是intel.AMD为首的复杂指令集CPU,另一个是以IBM.A ...
- AGENS算法
3.2 层次方法 下图,上面是从左到右由5个簇逐渐合并成1个簇的过程,下面是从右到左由一个簇逐渐分裂成5个簇的过程 AGENS算法 最后面一句话是重点,假设有<A,B>,<C,D&g ...
- AWS 6R
"The 6 R's": 6 Application Migration Strategies "The 6 R's": 6 Application Migra ...
- HTML5 版的flappy bird
Flappy Bird这款简单的小游戏累计下载量已经超过5000万次,每天收入至少5万美元.然而,2月10日其开发者Dong Nguyen却将Flappy Bird从苹果App Store和Googl ...
- canvas动画—圆形扩散、运动轨迹
介绍 在ECharts中看到过这种圆形扩散效果,类似css3,刚好项目中想把它用上,but我又不想引入整个echart.js文件,更重要的是想弄明白它的原理,所以自己动手.在这篇文章中我们就来分析实现 ...
- 判断页面环境是否在小程序的webview中
最近公司需要做小程序项目,但是又希望能够快速开发,就想着把web端的响应式页面放到webview里快速开发.但在判断页面环境的时候出现一些问题. 环境问题 用小程序提供的wx.miniProgram. ...
- 搭建Vue小页面
学习链接:https://blog.csdn.net/zhenzuo_x/article/details/81013475 环境搭建: 浏览器:Chrome IDE:VS Code或者WebStorm ...