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 ...
随机推荐
- synchronized的原理
synchronized的使用 synchronized是一个java中的关键字,是基于JVM层面的,用于保证java的多线程安全,它具有四大特性,可用于完全替代volatile: 原子性:所谓原子性 ...
- 学习Squid(二)
第6章 squid代理模式案例 6.1 squid传统正向代理生产使用案例 6.1.1 squid传统正向代理两种方案 (1)普通代理服务器 作为代理服务器,这是SQUID的最基本功能:通过在squi ...
- 学习 Haproxy (一)
haproxy是一个开源的.高性能的基于tcp和http应用代理的HA的.LB服务软件,它支持双机热备.HA.LB.虚拟主机.图形界面查看状态信息等功能,其配置简单.维护方便,而且后端RS的healt ...
- PCB设计常见规则及基本原则
一.PCB基础知识 1.全称:印制电路板或者印制线路板 2.分类 材质分类:硬板(Rigid PCB).软板FPC(Flexible PCB).软硬结合板(Rigid-Flex PCB).HDI板(含 ...
- PYthon窗口学习之用异步请求解决Treeview列表插入大量数据反应慢的解决办法
当列表插入大量数据时,经常会等一会才显示数据 异步请求就将每一个插入语句并发运行,从而提高插入速度 代码: # 显示结果 def insert_result(table, info): def ins ...
- 给大家补充一个结构体的例子:下面TwoNumber就是一个形式上的结构体
给大家补充一个结构体的例子:下面TwoNumber就是一个形式上的结构体: class TwoNumber { int num1; int num2; } public class T ...
- C2678 二进制“<”: 没有找到接受“const ***”类型的左操作数的运算符解决办法
正确代码如下:#include<iostream> #include<string> #include<map> using namespace std; /*仿函 ...
- js手机端判断滑动还是点击
网上的代码杂七杂八, 我搞个简单明了的!! 你们直接复制粘贴, 手机上 电脑上 可以直接测试!!! 上图: 上代码: <!DOCTYPE html> <html lang=&q ...
- CSS简单样式练习(七)
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- Servlet 3.1学习笔记
Servlet 3.1学习笔记 参考文档 Servlet 3.1标准 什么是 Servlet ? Servlet 是基于 Java 平台的 Web 组件,由一个容器管理,能够生成动态内容. 什么是 S ...