python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住“一切皆为对象,一切皆为对象的引用”这句话,其实这个特点类似于JAVA,所以在python里面大家也不用担心类似于C/C++中的指针的复杂问题, 在python中数据分为可变数据类型,不可变数据类型。

所以在学习python过程中我们一定会遇到不可变数据类型和可变数据类型。下面话不多说了,来一起看看详细的介绍吧。

1.名词解释

以下所有的内容都是基于内存地址来说的。

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

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

总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变。

2.数据类型分类

在python中数据类型有:整型,字符串,元组,集合,列表,字典。接下来我们用例子来一一查看他们分别属于不可变数据类型还是可变数据类型。

2.1 整型a = 1

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

a = 2

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

1912499232

1912499264

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么整型就是不可变数据类型。

2.2 字符串b = 'djx'

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

b = 'djx1996'

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

535056476344

535056476624

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么字符串就是不可变数据类型。

2.3 元组

元组被称为只读列表,即数据可以被查询,但不能被修改,但是我们可以在元组的元素中存放一个列表,通过更改列表的值来查看元组是属于可变还是不可变。c1 = ['1','2']

c = (1,2,c1)

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

c1[1] = 'djx'

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

result:

(1, 2, ['1', '2']) 386030735432

(1, 2, ['1', 'djx']) 386030735432

我们可以发现,虽然元组数据发生改变,但是内存地址没有发生了改变,但是我们不可以以此来判定元组就是可变数据类型。我们回头仔细想想元组的定义就是不可变的。我们修改了元组中列表的值,但是因为列表是可变数据类型,所以虽然在列表中更改了值,但是列表的地址没有改变,列表在元组中的地址的值没有改变,所以也就意味着元组没有发生变化。我们就可以认为元组是不可变数据类型,因为元组是不可变的。

2.4 集合

集合我们常用来进行去重和关系运算,集合是无序的。s = {1,'d','34','1',1}

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

s.add('djx')

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

result:

{'d', 1, '34', '1'} 870405285032

{1, '34', 'djx', '1', 'd'} 870405285032

我们可以发现,虽然集合数据发生改变,但是内存地址没有发生了改变,那么集合就是可变数据类型。

2.5 列表

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,它是以[]括起来,每个元素以逗号隔开,而且它里面可以存放各种数据类型。list = [1,'q','qwer',True]

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

list.append('djx')

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

result:

[1, 'q', 'qwer', True] 808140621128

[1, 'q', 'qwer', True, 'djx'] 808140621128

我们可以发现,虽然列表数据发生改变,但是内存地址没有发生了改变,那么列表就是可变数据类型。

2.6 字典

字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的。但是在3.6版本后,字典开始是有序的,这是新的版本特征。

字典的key值可以是整型,字符串,元组,但是不可以是列表,集合,字典。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))

result:

{1: 1, 'key2': 'djx', 'key3': 'li'} 256310956320

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

我们可以发现,虽然字典数据发生改变,但是内存地址没有发生了改变,那么字典就是可变数据类型。

python可变序列_python序列中可变数据类型有什么相关推荐

  1. python存储序列_python序列类型及一些操作

    序列分类 1.按存放的数据类型分类: 容器类型(能存放不同类型的数据):list.tuple.coolections.deque 扁平序列(只能存放一种类型的数据):str.bytes.bytearr ...

  2. python 字符串交集_Python序列--集合(set)

    集合 集合用于保存不重复元素. - 集合和列表非常相似 - 不同点: 1.集合中只能存储不可变对象 2.集合中存储的对象是无序(不是按照元素的插入顺序保存) 3.集合中不能出现重复的元素 集合的所有元 ...

  3. python中一切数据都是对象吗_Python 对象中的数据类型

    对于python,一切事物都是对象,程序中存储的所有数据都是对象,对象基于类创建 计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型. ...

  4. python哪些是可变对象_python的不可变对象与可变对象及其妙用与坑

    先上图. 图里,分别用三个整数进行了验证.可以发现当a和b值相同时,a与b地址也一致.改变a的值,a的地址也跟着改变了. 原因 python的宗旨之一,万物皆对象.(单身狗狂喜) 而对象又被分为可变对 ...

  5. java 可变参数列表_java中可变参数列表的实现方法

    我们在对可变参数有一定的认识后,可以引申一下它的使用范围.在数组中也会需要参数的传入,那么结合参数的数量不固定,我们在参数类型上也得到了增加,这就是本篇所要讲的可变参数列表.下面我们就java可变参数 ...

  6. python中可选参数和可变参数_Python函数中的可变长参数详解

    一.Python函数中的参数 1.使用python的函数时,有参数类别,比如位置参数.关键字参数.可变长参数 2.位置参数.关键字参数很好理解,关键是可变长参数经常能见到,但是一直没有搞懂是什么意思 ...

  7. python字典属于无序序列_Python序列结构--字典

    '&', 6), ('!', 12), ('u', 10), ('F', 9), ('W', 6), ('c', 11), ('1', 8), ('5', 6), (';', 5), ('V' ...

  8. python交互数据_Python用户交互以及数据类型

    一.用户交互与格式化输出 1.用户交互 1.1什么是用户交互 程序等待用户输入的数据,程序执行完毕后为用户反馈信息. 1.2为何程序要与用户交互 为了让计算机像人类一样与用户交互 1.3使用方式 在p ...

  9. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

最新文章

  1. MySQL中函数CONCAT及GROUP_CONCAT
  2. ZedGraph曲线图实现X轴与Y轴可拖动,并且对应曲线也一起移动
  3. Linux系统调用及用户编程接口(API)学习
  4. 撒花!算法岗必须复现的上百篇经典论文代码完结啦! | 附下载链接
  5. 包过滤防火墙和代理应用防火墙
  6. 设置windows引导linux分区,windows下安装grub引导Linux
  7. 到退休单位没有通知,半年后通知退休,这半年是否算工龄?
  8. 如何在PowerShell中连接字符串和变量?
  9. MySQL JOIN连接用法
  10. Linux内核部件分析 设备驱动模型的基石kobject
  11. 【软件工程】——软件需求说明书
  12. Get和Post请求区别和使用场景
  13. 建筑工程师的转行学计算机科学与技术的抉择
  14. UVA 11137 - Ingenuous Cubrency
  15. java8:lambda级联表达式(Cascading)或柯里化(Currying)原理简化详解
  16. 手把手教您JbuliderX+Tomcat5.0的配置
  17. 软件测试面试题 —— 移动端功能测试高频面试题
  18. sql server日志占用空间过大的问题清理日志文件
  19. VGA/DVI/HDMI/DP接口知识全详解
  20. Linux系统上文件压缩和解压相关

热门文章

  1. Why AG3 client 815 transport entries disabled
  2. 如何用ABAP代码的方式弹出SPRO里的customizing activity
  3. SAP C4C客户主数据重复检查和清洗实现
  4. SAP Cloud for Customer的employee创建会自动生成Business partner
  5. Jerry 2016年5月20日到5月23日的学习笔记
  6. markdown 菜单 折叠_疑似三星Z Fold 3折叠屏手机专利公布 带有S pen手写笔存储槽_手机行情...
  7. 计算机组成与设计第五版英文_南京大学计算机考研信息汇总
  8. android8.1新功能,Android 8.1新特性:烦人的“正在后台运行”,拜拜
  9. 2019黑马python面试资料_2019最新Python黑马头条推荐系统项目
  10. python输入框_selenium+python 对输入框的输入处理方法