当前位置: 首页 > news >正文

【Python】可变数据类型 不可变数据类型 || hash

  •  🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、个人社区人数累计4w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 5 月 2 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:【Python】系列_謓泽的博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩

可变数据类型 🐟 不可变数据类型 

在Python当中的列表(List)字典(Dict) 是属于可变数据类型。

在Python当中的整形(int)浮点型(float)字符串型(string)元组(Tuple) 是属于不可变数据类型。

以上就是可变类型与不可变数据类型这个是要掌握的。

不可变类型:在内存当中一旦进行了定义并且指定了内容之后,便不再允许进行修改了。

不可变类型: 在内存当中分配了空间的话,我们是可以通过变量名调用方法来去修改它的列表或者是字典当中的内容的。通过方法进行调用可以做到通过方法调用(appedn、pop...)列表字典的内容发生变化,但是它们的内存地址是依旧不会发生变化的。示例代码如下↓

listA = ['Python',123456,3.14,'你好','True']
print("追加之前:",listA)
print("前地址:",id(listA))
listA.append(666)
print("追加之后:",listA)
print("后地址:",id(listA))

运行结果🖊 

追加之前: ['Python', 123456, 3.14, '你好', 'True']
前地址: 1642029321408
追加之后: ['Python', 123456, 3.14, '你好', 'True', 666]
后地址: 1642029321408

上述红色颜色字体发现它们的地址都是一样的,从中也可以说明上述的证实了。

注→id()用来查看变量类型当中的地址的。

那么上述是不可变类型我们来观察下可变类型来看看结果会是怎么样的吧→如下代码所示↓

a = 20
print(id(a))
a = 24
print(id(a))

运行结果🖊 

2689600613264
2689600613392

上述红色标注粗体字可以证实这个是不可变类型,改变之后就会改变了它们内存的地址了。

id() 

辨别变量是可变数据类型还是不可变数据类型,我们只需要使用 id() 函数就可以查看变量在内存地址当中的变换即可。

如果 id(变量) 的值不变,即说明该变量是不可变数据类型。

如果 id(变量) 的值变化,即说明该变量是可变数据类型。

不可变数据类型分析 

不可变数据类型分析,使用 id() 函数来查看变量的内存地址。

输出 int_a1 变量的内存地址,输出 int_b1 变量的内存地址。

示例代码如下所示 👇

int_a1 = 1
int_b1 = 1
print(id(int_a1))
print(id(int_b1))

运行结果如下 👇

94121337434592
94121337434592 

从中可以发现数据类型是不可变的!

用图表示上述代码,如下所示 👇 

那么如果我们修改上述代码当中变量int_a1当中的值此刻内存地址会发生什么样的变换呢?到底会发生变换还是不会发生变换。

示例代码如下所示 👇 

int_a1 = 2
int_b1 = 1
print(id(int_a1))
print(id(int_b1))

运行结果如下 👇

94216515551744
94216515551712

从这里可以发现改变int_a1当中的值,没有修改b1当中的值数据类型都是(int)从中会发生内存地址的改变。

可变数据类型分析 

可变数据类型分析,以列表为示例。

输出 a 变量的内存地址,输出 b 变量的内存地址。

示例代码如下所示  👇

a = [1,2,3,4]
b = [1,2,3,4]
print(id(a))
print(id(b))

运行结果如下 👇

140510981916096
140510981930432 

在上述代码示例当中,分别定义了列表 a = [1,2,3,4] 和 b = [1,2,3,4]。通过下列图中所示的内存分布图来了解变量 a 和 b 是怎么分配内存的。

那么让我们来思考下既然列表是可变数据类型,那么在定义两个列表指向同一内存空间时候,如果修改其中一个列表元素,另外一个列表中元素是否被修改。 

定义列表a,然后赋值给b,查看内存地址

示例代码如下所示 👇 

a = [1,2,3,4]
b = a
print(id(a),id(b))

运行结果如下 👇 

140533352129984 140533352129984

通过赋值可以看出,变量 a 和 b 都指向了统一空间没有修改。

修改列表a,查看列表b 是否改变 

示例代码如下所示 👇 

a = [1,2,3,4]
b = [1,2,3]
print(id(a))
print(id(b))

运行结果如下 👇 

139793869161920
139793869176256 

提示:因为a、b指向的都是同一列表,为可变数据类型。因此对 a、b任意一个列表进行修改都会影响到另外一个列表的值。

哈希(hash) 

Python 当中内置有一个名字叫做 hash(o) 的函数。

  • 接收一个不可变类型的数据作为它的参数,注:整形(int)浮点型(float)字符串型(string)元组(Tuple) 是属于不可变数据类型。
  • 接收一个不可变的数据类型作为参数。『python的特点』
  • 返回 结果是一个整数(int)

哈希是一种算法,起作用就是提取数据的特征码『指纹』

  • 相同的内容 得到 相同的结果。
  • 不同的内容 得到 不同的结果。
  • 指纹的意思:如果是同一个人指纹就是相同的,如果是不同的人指纹就是不同的。

示例代码如下↓

# 不可变数据类型
print(hash(1))
# 可变数据类型
print(hash([123]))

运行结果如下↓

1

TypeError: unhashable type: 'list'

相信当你看到这个也就对python当中的哈希也就有所了解了。

拓展key

键值的key必须是不可变数据类型。

键值对的value可以是任意数据类型。这个要注意下对于hash

dict = {hash([123]):123}
print(dict)

运行结果🖊 

    dict = {hash([123]):123}
TypeError: unhashable type: 'list'

相关文章:

【Python】可变数据类型 不可变数据类型 || hash

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…...

MySQL 篇-深入了解多表设计、多表查询

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 多表设计概述 1.1 多表设计 - 一对多 1.2 多表设计 - 一对一 1.3 多表设计 - 多对多 2.0 多表查询概述 2.1 多表查询 - 内连接 2.2 多表查询 - 外连接 2.3 多表查…...

【Java】Spring的ReflectionUtils类常用方法学习笔记

目录 ReflectionUtils介绍 常用方法 访问字段 方法调用 处理回调 示例 脑容量不够了,以简单的小知识作为一天的结尾吧(悲 ReflectionUtils介绍 ReflectionUtils是Spring Framework中非常实用的一个工具类,为开发人员提供了简便的反射操作方法&am…...

内存函数详解

1. memcpy函数 void * memcpy ( void * destination, const void * source, size_t num ); 1.1 函数的功能,使用与注意事项 1. memcpy函数的作用是内存拷贝,即将source指向的空间中的num个字节拷贝到destination指向的空间中去,然后返回de…...

事务(transaction)

事务,什么是事务,事务就是由单独单元的一个或多个sql语句组成,在这个单元中,每个sql语句都是相互依赖的。而整个单独单元是作为一个不可分割的整体存在,类似于物理当中的原子(一种不可分割的最小单位&#…...

Linux之cd、pwd、mkdir 命令

cd命令,切换目录 1)当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录。 2)我们可以通过cd命令,更改当前所在的工作目录。 3)cd命令来自英文:C…...

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1:【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程!全套200集!学不会退出IT界! 参考文章2:清华教授大力打造的Python高级核心技术!整整100集,强烈建议学习(Python3…...

学习JAVA的第十五天(基础)

目录 数据结构 二叉树 二叉查找树 平衡二叉树 红黑树 Set系列集合 HashSet集合 LinkedHashSet集合 TreeSet集合 前言:学习JAVA的第十四天(基础)-CSDN博客 数据结构 二叉树 元素:结点&am…...

LVS四层负载均衡集群

简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访…...

【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环

简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行…...

MAC | linux | SSH 密钥验证

SSH密钥登陆过程 客户端通过ssh-keygen生成自己的公钥和私钥。手动将客户端的公钥放入远程服务器的指定位置。客户端向服务器发起 SSH 登录的请求。服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。客户端收到服务器发来…...

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》(https://github.com/datawhalechina/hugging-multi-agent),深入理解并实践多智能体系统的开发。 本文为该课程的第四章(多智能体开发)的第一篇笔记。主要记录下多智能体的运行…...

机器学习-面经(part7、无监督学习)

机器学习面经系列的其他部分如下所示: 机器学习-面经(part1) 机器学习-面经(part2)-交叉验证、超参数优化、评价指标等内容 机器学习-面经(part3)-正则化、特征工程面试问题与解答合集机器学习-面经(part4)-决策树共5000字的面试问题与解答…...

teknoparrot命令行启动游戏

官方github cd 到teknoparrot解压目录 cd /d E:\mn\TeknoParrot2_cp1\GameProfiles启动游戏 TeknoParrotUi.exe --profile游戏配置文件游戏配置文件位置/UserProfiles,如果UserProfiles文件夹里没有那就在/GameProfiles,在配置文件里将游戏路径加入之间,或者打开模拟器设置 …...

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程,获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…...

多线程相关面试题(2024大厂高频面试题系列)

1、聊一下并行和并发有什么区别? 并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程 2、说一下线程和进程的区别? 进程是正在运行程序的实例&#xff…...

mysql 时间精度问题

timestamp到2038年,还有14年时间,一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…...

基于python的爬虫原理和管理系统实现(代码下载)

Python实现爬虫的原理如下: 发送请求:使用Python中的库,如Requests或urllib,向目标网站发送HTTP请求,获取网页的内容。 解析网页:使用Python中的库,如BeautifulSoup或lxml,对获取的…...

IOS 设置UIViewController为背景半透明浮层弹窗,查看富文本图片详情

使用场景&#xff1a;UIViewController1 打开 UIViewController2&#xff08;背景半透明弹窗&#xff09; 案例&#xff1a;打开富文本网页<img>图片的url查看图片详情 WKWebView WKNavigationDelegate代理方法设置js代码点击事件 ///注册添加图片标签点击js方法 - …...

网络层介绍

网络层是OSI模型中的第三层&#xff0c;也称为网络协议层。它主要负责在源主机和目标主机之间提供数据通信的路径选择和控制。网络层通过使用源和目标主机的网络地址来实现数据包的路由和转发。 以下是网络层的一些主要功能&#xff1a; 路由选择&#xff1a;网络层使用路由选…...

3步解锁Umi-OCR服务化潜能:让自动化文字识别融入工作流

3步解锁Umi-OCR服务化潜能&#xff1a;让自动化文字识别融入工作流 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/Git…...

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

1. 认识Zygisk-IL2CppDumper的攻击原理 如果你开发过Unity游戏&#xff0c;一定对IL2CPP不陌生。这是Unity官方推荐的脚本后端&#xff0c;它把C#代码转换成C代码再编译为本地机器码&#xff0c;相比Mono模式确实安全不少。但最近一年&#xff0c;一个叫Zygisk-IL2CppDumper的工…...

Qwen3-VL-WEBUI效果实测:对比其他模型,看看优势在哪里

Qwen3-VL-WEBUI效果实测&#xff1a;对比其他模型&#xff0c;看看优势在哪里 1. 引言&#xff1a;当AI不仅能“看”&#xff0c;还能“做” 想象一下&#xff0c;你给AI看一张软件界面的截图&#xff0c;它不仅能告诉你界面上有什么&#xff0c;还能一步步指导你如何操作&am…...

打破音乐枷锁:ncmdumpGUI让你的NCM文件重获自由

打破音乐枷锁&#xff1a;ncmdumpGUI让你的NCM文件重获自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你下载的音乐其实并不属于你。当你在网易云音乐客户…...

OpenTelemetry Operator快速入门:5分钟搞定K8s集群中的分布式追踪系统搭建

OpenTelemetry Operator快速入门&#xff1a;5分钟搞定K8s集群中的分布式追踪系统搭建 在云原生时代&#xff0c;微服务架构的复杂性让分布式追踪成为刚需。想象一下&#xff0c;当某个电商平台的订单服务出现延迟&#xff0c;你需要快速定位是支付网关、库存系统还是物流接口的…...

异构数据库迁移利器:dbswitch实现多源数据高效同步

1. 异构数据库迁移的痛点与常见方案 第一次接触异构数据库迁移时&#xff0c;我被各种工具搞得晕头转向。当时公司需要把Oracle的业务数据同步到Greenplum做分析&#xff0c;试了好几种方案都不太理想。比如用kettle配置gpload&#xff0c;光是理解那些参数就花了两天时间&…...

从Flamingo到MiniCPM-V 4.5:聊聊那些‘内置’视觉压缩的黑科技,以及我们为什么需要它

从Flamingo到MiniCPM-V 4.5&#xff1a;视觉压缩技术的系统级设计哲学 当一张4K高清图像被拆解成数万个视觉token时&#xff0c;工程师们面对的不仅是算力挑战&#xff0c;更是一场关于信息本质的思辨。为什么Flamingo选择固定64个潜在token&#xff1f;MiniCPM-V 4.5的3D-Res…...

MPO光纤跳线:从结构解析到数据中心高密度布线实战

1. MPO光纤跳线&#xff1a;高密度布线的秘密武器 第一次接触MPO光纤跳线时&#xff0c;我被它的"小身材大容量"震惊了。这个看起来和普通SC连接器差不多大小的家伙&#xff0c;居然能塞下12根甚至24根光纤&#xff01;这就像在普通U盘大小的空间里装下了整个移动硬盘…...

VisualVM安全监控指南:敏感数据保护与权限管理

VisualVM安全监控指南&#xff1a;敏感数据保护与权限管理 【免费下载链接】visualvm VisualVM is an All-in-One Java Troubleshooting Tool 项目地址: https://gitcode.com/gh_mirrors/vi/visualvm VisualVM作为一款强大的Java应用性能监控与故障诊断工具&#xff0c;…...

如何高效捕获网页媒体资源:猫抓浏览器插件智能解决方案

如何高效捕获网页媒体资源&#xff1a;猫抓浏览器插件智能解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代&#xff0c;网页中的视频、音频和图片资源往往难以直接保存&…...