python 数据存储方式_数据存储是什么python-程序员宅基地

技术标签: python  数据结构  

blog.csdn.net/ffblog/article/details/46558051

一.序列
1.用于存储一系列的数据
2.在内存中,序列就是一块用于存放多个值的连续的内存空间

如a=[10,20,30,40]存储示意:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.python中序列结构:str,list,tuple,dict,set

4.dict存储原理:底层仍是依靠列表实现,核心是散列表
(1)散列表:

  • 散列表是一个稀疏数组(总是有空白元素);包括很多个单元,每个单元叫表元bucket;每个bucket包括两部分:key的引用 & value的引用
    在这里插入图片描述
  • 所有bucket的结构和大小都相同,可以通过偏移量来读取指定的bucket

(2)键值对如何放入dict:

#创建dict对象:
>>>a={
    }
>>> a['name']='gaoqi'

创建完dict对象后,生成一个散列表,假设长度为8:
在这里插入图片描述
首先算出键’name’的散列值,即哈希值:

>>> hash('name')
8232312710671778809
>>> bin(hash('name'))
'-0b1010111101001110110101100100101'

可以用最右侧n(如3)位数(101)2(即(5)10)作为偏移量,查看对应的bucket是否为空:如果为空,放入键值对;否则,取前n位(如3)数(100)2(即(4)10)作为偏移量,如此循环
在这里插入图片描述
在这里插入图片描述

  • 当散列表有2/3的bucket已被使用,将自动扩容

(3)如何根据键查找键值对:

>>>a={
    'name':'gaoqi'}
>>>a.get('name')
'gaoqi'

调用dict.get(key)时,就是根据key查找键值对,找到value
首先,计算key的散列值

>>>bin(hash('name'))
'-0b1010111101001110110101100100101'

拿出最右边n位(如3)数(101)2作为偏移量,查看对应的bucket是否为空:如果为空,返回none;否则比较key的哈希值是否相同,相同返回value,否则取前n位继续查看,如依次取完仍未找到则返回none
在这里插入图片描述
(4)总结:

  • key必须可散列
1.num,str,tuple等
2.自定义对象:
  ·支持hash()
  ·支持__eq__()
  ·若a==b为True,则hash(a)==hash(b)也为True
  • 内存开销巨大,但查询速度很快,空间换时间
  • 往dict添加新键可能导致扩容,使key的次序改变—>不要在遍历dict的同时修改

5.set存储原理:底层是dict实现,set中所有元素都是dict中的key,因此不能重复

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46131409/article/details/104927169

智能推荐

机械优化设计进退法c语言程序,机械优化设计c语言程序讲解.doc-程序员宅基地

文章浏览阅读64次。计算 f(x1,x2)=x^2+x1^2-x0*x1-10*x0-4*x1+60#include "stdio.h"#include "stdlib.h"#include "math.h"double objf(double x[]){double ff;ff=x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60;return(ff);}void jtf(..._机械优化设计进退法c语言程序

Vue3打印插件Print.js的使用_vue3 print-js-程序员宅基地

文章浏览阅读1.8k次,点赞18次,收藏25次。如何认识和快速上手 `Print.js`,我们可以从官网的内容开始阅读,在官网中有很详细的介绍和使用例子,虽然是英文版的。`Print.js` 打印插件包括了 `PDF` 打印、`HTML` 打印、`JSON` 打印、图像打印等。本人每篇文章都是一字一句码出来,希望对大家有所帮助,多提提意见。_vue3 print-js

YOLOV8 C++ opecv_dnn模块部署_opencv4.7 cudnn yolov8-程序员宅基地

YOLOV8 C++ opecv_dnn模块部署。opencv编译需时间久,GPU版本可实时,有问题私信留言。

JS获得token_js获取token-程序员宅基地

文章浏览阅读2.3w次。使用struts有一个很奇怪的事情,就是你不知道在什么时候,就放进来一个bug,重复地提交,而且渗透到好几个方法,甚至整个action都会被污染。像打补丁似的,struts本身可以有一个可以用来防止重复提交的拦截器: 虽然这个token能够有效地防止重复提交,但是也能够让你原来的架构一团糟。可以拿一个亲身经历作为教材。在一个搭了frame的框架里,左边的frame_js获取token

Ubuntu-16.06 + OpenCV-3.3.0 + 一些常见的问题_fatal: in-source builds are not allowed. you shoul-程序员宅基地

文章浏览阅读6.4k次。今天在跑一个faster-rcnn的案例(https://pjreddie.com/darknet/yolo/)涉及到编译 openCV,于是又再一次编译并配置一次 OpenCV。值得一提的是,如果你只是使用一些深度学习框架(如,tensorflow 或者 keras 等)需要用到 opencv 的话(import cv2),只需要直接安装 opencv-python 即可。执行 pip install opencv-python 命令即可。期间也遇到一些挺常见的错误,本人借此机会整理于此。_fatal: in-source builds are not allowed. you should create a separate direct

论文阅读—基于目标偏置的双向APF-RRT*算法的无人机轨迹规划-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。在每次迭代过程中,由随机生长树生成的新节点new,根据目标q目标的吸引力逐渐趋向于目标,生长树向目标点增长。否则,应用Swap函数切换到另一个树T2以增长一次,以此类推,直到当循环达到指定的次数时程序停止,从而得到更好的路径。高质量采样策略:根据单向的目标偏向策略,将目标点视为具有一定概率的随机采样点,使新节点具有向目标增长的趋势。有效搜寻策略:每棵树的目标点和随机采样点分别对最近的节点有吸引力,障碍是对最近的节点有排斥力。生长,直到两棵生长树相遇形成可行路径,在后续迭代中,更新更好的路径。_apf-rrt*

随便推点

oracle忘记密码_oracle密码忘记了-程序员宅基地

文章浏览阅读1.9k次。打开一个终端窗口(cmd),输入以下命令进入SQL*Plus。3、查看用户(知道要修改用户名的跳过)_oracle密码忘记了

正整数n分解成若干个个不同的自然数之和,使得乘积最大_把一个数拆成n个不相同的数的和乘积最大-程序员宅基地

文章浏览阅读2k次。要使加数乘积最大,那么所有的加数要尽可能接近。所以设n的加数如下:2+3+…+m+k;m为最大加数,k为剩余的数(k<=m);然后把k分到其他数中,策略就是从m->2的数值一次加一,直至把k消耗完。要使加数乘积最大,那么所有的加数要尽可能接近。所以设n的加数如下:2+3+…+m+k;m为最大加数,k为剩余的数(k<=m);然后把k分到其他数中,策略就是从m->2..._把一个数拆成n个不相同的数的和乘积最大

前端接收 json 字符串,转数组后 id 精度丢失问题处理_json.parse丢精度-程序员宅基地

文章浏览阅读630次。3、接收到数据后进行转换。2、在使用的页面引入。_json.parse丢精度

Docker部署redis_docker redis-程序员宅基地

文章浏览阅读2.2w次,点赞8次,收藏51次。Docker 安装Docker 部署redis在docker hub 上可以看到有redis 的官方镜像不去网站,也可以通过如下命令查看有那些镜像可用Docker search 命令docker search redis 拉取redis镜像Docker pull 命令这里我们拉取官方的最新版本的镜像:docker pull redis:latest查看本地镜像Docker images 命令有redis 和 hello-world运行容器Docker run 命令d_docker redis

微软简化 Windows 10 上的 WSL 安装_wsl.exe-程序员宅基地

文章浏览阅读675次。在 Windows 10 的最新内测版本中(Windows 10 Insider Preview Build 20150),微软为WSL 的安装和内核升级新增了两个命令,分别是wsl.exe--install和wsl.exe--update。Windows 10 用户可通过命令行工具或Windows Terminal 运行上述命令。在尚未开启WSL 的机器上运行wsl.exe--install命令将会启用 WSL 可选组件和虚拟机平台可选组件,并提示重启机器。通过此方式安装 WSL 会将W..._wsl.exe

JS中sort()方法的用法,参数以及排序原理-程序员宅基地

文章浏览阅读1.3k次。sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。如果..._js sort对象中的参数