一.可变类型与不可变类型的特点

1.不可变数据类型

不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了.

举例子:

>>> x = 18

>>> id(x)

4497811200

>>> id(18)

4497811200

>>> x = 19

>>> id(x)

4497811232

>>> id(18)

4497811200

>>> y = 18

>>> id(y)

4497811200

>>>

一开始x = 18,开辟一块地址为4497811200的内存,即18对应的地址为4497811200,后来x = 19 ,重新开辟一块地址为4497811232的内存来放19,可以看到不变的意思是指18,和19在内存中的地址不会改变,将18赋值给y时,y指向的地址即为4497811200。

1.可变数据类型

结合不可变数据类型,可变数据类型就很好理解来,可变数据类型是指变量所指向的内存地址处的值是可以被改变的。

>>> x = [1,2,3]

>>> id(x)

4501838920

>>> y = [1,2,3]

>>> z = [1,2,3]

>>> id(y)

4501838600

>>> id(z)

4501838664

从另外一个角度来看:

可变类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。

#a的值改变了,a对应的内存地址也改变了

>>> a=1

>>> id(a)

4497810656

>>> a = 2

>>> id(2)

4497810688

#直接对a操作,相当于拷贝了一份a的值,在其他内存地址操作,a的值不变

>>> a+1

3

>>> id(a)

4497810688

>>> a

2

#b的值改变了,b对应的内存地址不变,第一次给b赋值的时候,给b划分一块内存空间,该空间就不变了

>>> b = [1,2,3]

>>> id(b)

4501839496

#直接对b操作,b的值改变,b指向的内存空间不变

>>> b.append(4)

>>> id(b)

4501839496

>>> b

[1, 2, 3, 4]

>>>

二.哪些是可变类型哪些是不可变类型

不可变:Number(数字)、String(字符串)、Tuple(元组)。

#整型

a = 1

print(id(a), type(a))

a = 2

print(id(a), type(a))

# 4361254304

# 4361254336

#字符串

b = 'anne'

print(id(b),type(b))

b = 'anne1995'

print(id(b),type(b))

# 4363638744

# 4363684784

#元组

c1 = ['1','2']

c = (1,2,c1)

print(c,id(c),type(c))

c1[1] = 'djx'

print(c,id(c),type(c))

# (1, 2, ['1', '2']) 4363948248

# (1, 2, ['1', 'djx']) 4363948248

注意:此时元组的值发生了变化而内存地址没变,但我们依然称元组为不可变类型,为什么呢?其实改的是元组中的列表,列表是可变类型,改变了值后地址依然不变。但是元组的定义就是不可变的,

元组被称为只读列表,即数据可以被查询,但不能被修改。

可以变:Set(集合)、List(列表)、Dictionary(字典)。

#集合

s = {1, 'd', '34', '1', 1}

print(s, type(s), id(s))

s.add('djx')

print(s, type(s), id(s))

# {1, '1', 'd', '34'} 4401385256

# {1, '1', '34', 'd', 'djx'} 4401385256

#列表

list = [1,'q','qwer',True]

print(list,type(list),id(list))

list.append('djx')

print(list,type(list),id(list))

# [1, 'q', 'qwer', True] 4401113608

# [1, 'q', 'qwer', True, 'djx'] 4401113608

#字典

tuple = (1)

dic = {1:2}

d = { tuple:1,'key2':'djx','key3':'li'}

print(d,type(d),id(d))

d['key4'] = 'haha'

print(d,type(d),id(d))

# {1: 1, 'key2': 'djx', 'key3': 'li'} 4401075976

# {1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} 4401075976

python不可变的列表被称为_【Python学习】可变类型和不可变类型相关推荐

  1. python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  2. python中一切内容都可以称为_创业基础答案黑龙江大学

    [单选题]成人麻醉前什么时间禁食水最合适 A. 禁食14h,禁水6h B. 禁食12h,禁水4h C. 禁食10h,禁水2h D. 禁食8h,禁水1h E. 禁食6h,禁水30min [多选题]木材的 ...

  3. python中一切内容都可以称为_孙子兵法中的思维智慧知道智慧树2020年答案搜题公众号...

    [判断题]In a TBL framework, the context is already established by the teacher and the students together ...

  4. python调用百度地图画轨迹图_[python]百度地图API,正/逆地理编码,路线规划接口的调用,实现输出出行的距离和......

    [Python] 纯文本查看 复制代码''' 文件名:L17.py 作者:小饭团 创建时间:2019年1月11日15:17:03 文件描述:调用Web服务API接口,百度地图路线规划 正/逆地理编码 ...

  5. 51cto python数据分析系列课程 55g_热图_ Python数据分析系列视频课程--玩转数据可视化_数据可视化视频-51CTO学院...

    matplotlib包是基于Python平台的统计绘图利器,是在python平台上完成数据可视化不可或缺的工具,而基于matplotlib进一步开发的seaborn,更是将数据呈现与可视化的可用性推到 ...

  6. python中index从列表中查_在Python中查找包含它的列表的项目的索引

    >>> ["foo", "bar", "baz"].index("bar") 1 警告如下 请注意,虽 ...

  7. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

    这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录).我从网上找了一个比100*100稍微大一点的图片,你可以也找一个.然后我们就可以一起开始今天的学习啦 ...

  8. 6. Python 元组,不可变的列表,滚雪球学 Python

    希望看到文章的 Python 学习爱好者可以坚持打卡,在评论区坚持跟橡皮擦卡学习的朋友,在 100 天之后,橡皮擦将送出神秘大奖. 已完成的文章 标题 链接 1. 这才是 Python 学习的正确起手 ...

  9. python判断两个列表是否相同_如何检查两个元组列表是否相同

    @joce已经提供了an excellent answer(我建议接受这一条,因为它更简洁.更直接地回答了您的问题),但我想在您最初的帖子中提到这一部分:The list may have a len ...

最新文章

  1. PyCharm代码回滚,恢复历史版本
  2. 第18章 多线程----线程同步
  3. 服务级后门自己做——创建服务
  4. 麦子的第一个注解+spring小案例 欢迎指点学习。
  5. 在jsp页面实现保存登录用户名和密码
  6. 配置window下python3环境
  7. ubuntu 中文设置
  8. 用python简单查找大文件
  9. .NET core 项目发布、部署到iis中
  10. lol官网服务器维修啥意思,英雄联盟5.6维护 lol官网服务器维护公告
  11. 186.MultiAutoCompleteTextView
  12. 51951-04-3,Hydroxy-PEG2-CH2CO2H sodium salt羟基可以进一步衍生或替换为其他反应性官能团
  13. 【软考】2020下半年软件设计师 易错知识点(1)
  14. servlet+mysql实现的学生评教系统(角色:学生、教师、管理员 功能:评教、修改密码、评教规则管理、评教结果查看、学生管理、教师管理、班级管理、学生信息、评教结果可视化展示等)
  15. 夜神模拟器的安装与使用
  16. 关于ChatGPT的一切;CUDA入门之矩阵乘;PyTorch 2.0发布|AI系统前沿动态
  17. Python学习(4)——数学类问题解答
  18. 380免费云存储_2019年最好的在线照片存储,让你的照片安全存储在云端
  19. Linux中No such file or directory但文件存在的解决办法
  20. 【实战演练】快速获取容器VIPs,解决集群自动化测试难题

热门文章

  1. 用神经网络分类两条夹角为θ的直线
  2. 0.2 控制系统的状态空间表示法
  3. 双显卡能双屏显示吗_i5-8305G+双显卡交火,最近很火的迷你主机零刻Turbo性能靠谱吗?...
  4. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第9章-结论与展望
  5. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
  6. windows 下远程登录ubuntu服务器--realVNC
  7. 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
  8. 多领导者改进算法的MATLAB仿真
  9. 命令行选项解析函数:getopt()
  10. Linux /etc/profile文件详解