数据类型3
可变和不可变类型
hash函数
1:可变和不可变的数据类型
到现在,我们已经理解了数字,字符串,列表,元组数据类型
在python中,我们对数据类型还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类型。在了解原理之前,我们先来看看分类情况:
可变类型:列表
不可变类型:数字 , 字符串 , 元组
举个例子:
列表
>>> l = [1,2,3,4]
>>> id(l)
21314136
>>> l[1] = 1.5 # 修改里面的元素
>>> id(l) # 发现整体的内存地址没有变化
21314136
>>> id(l[1]) # 索引为1的内存地址
58572944
>>> l[1] = 6 # 修改索引为1 的值
>>> id(l[1]) # 索引为1的内存地址 发现发生了变化
262396160
数字:
>>> a = 1
>>> id(a)
4297537952
>>> a+=1
>>> id(a)
4297537984
字符串:
#例1
>>> s = 'hello'
>>> s[1] = 'a'
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
s[1] = 'a'
TypeError: 'str' object does not support item assignment
#例2
>>> s = 'hello'
>>> id(s)
4392917064
>>> s += ' world'
>>> s
'hello world'
>>> id(s)
4393419504
字符串也可以像列表一样使用索引操作,但是通过上例可以看出,我们不能像修改列表一样修改一个字符串的值,当我们对字符串进行拼接的时候,原理和整数一样,id值已经发生了变化,相当于变成了另外一个字符串。
元组—不可修改
>>> t = (1,2,3,4)
>>> t[1] = 1.5
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
t[1] = 1.5
TypeError: 'tuple' object does not support item assignment
2:hash函数:
可变的数据类型是不可以被hash的,如果一个值可以hash那么说明这是一个不可变得数据类型。
Hashing 将一段数据(无论长还是短)转成相对较短的一段数据,例如一个字符串或者一个整数。
这是通过使用单向哈希函数来完成的。"单向" 意味着逆转它是困难的,或者实际上是不可能的。
加密可以保证信息的安全性,避免被拦截到被破解。Python 的加密支持包括使用 hashlib 的标准算法(例如 MD5 和 SHA),根据信息的内容生成签名,HMAC 用来验证信息在传送过程中没有被篡改。
>>> a = 123
>>> b = 123
>>> hash(a)
123
>>> hash(b)
123
>>> c = [1,2]
>>> hash(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(c[1])
2
>>> d = '123'
>>> hash(d)
-1699721517
>>> e = (1,23,4)
>>> hash(e)
740729019
>>> help(hash)
Help on built-in function hash in module builtins:
hash(obj, /)
Return the hash value for the given object.
Two objects that compare equal must also have the same hash value, but the
reverse is not necessarily true.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现