python3中有六个标准的数据类型:number(数字型)、string(字符串型)、list(列表)、type(元祖)、dictionary(字典)、set(集合),其中不可变类型三个:number、type、stri;剩下的三个是可变数据类型。

0x01:不可变数据类型

对于判断是否为可变数据类型,我们可以用id函数,它的作用是获取对象的内存地址。假如我们写了下面两行代码:

>>> a=5 
>>> id(5)
1351465552

第一行声明了一个number类型的变量,并给他赋值为5,第二行获取到了a这个对象的内存地址。

下面我们改变一下a的值,在id一下试试:

>>> a=5
>>> id(5)
1351465552
>>> a=6
>>> id(a)
1351465584

可以看到当a的值被改变时,a这个number类对象的内存地址也发生了变化。也就是说,一个内存地址只能对应一个值,内存地址与值的对应关系是不能变的,这种叫不可变数据类型。同样,字符串也是。

>>> s='qwer'
>>> id(s)
2374200496792
>>> s='qwr'
>>> id(s)
2374200498976

元祖里面的值不能被修改,所以也为不可变数据类型,但如果元祖里含有列表的话,列表里面的值可以被修改:

>>> t=(1,2,3,[4,5,6])
>>> t[3]
[4, 5, 6]
>>> t[3][1]
5
>>> t[3][1]=6
>>> t[3]
[4, 6, 6]

 0x02:可变数据类型

可变数据类型就是当对象的值改变是,对象的内存地址不会改变。用list试一下

>>> a=[4,5,6]
>>> id(a)
2374200503880
>>> a[1]
5
>>> a[1]=6
>>> a[1]
6
>>> id(a)
2374200503880

但是你如果像下面这样写的话,那地址就会改变了。

>>> a=[1,2,3]
>>> id(a)
2374200502984
>>> a=[4,5,6]
>>> id(a)
2374200503880

因为这样写的话,就不是改变a的值了,此时的a已经不再是上面哪一个了,它是一个新的list对象

(ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

最新文章

  1. NOIP2010 题解
  2. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service
  3. Linux内核的同步机制---自旋锁
  4. Screen tearing
  5. 010 有顺序的Map的实现类:TreeMap和LinkedHashMap
  6. 关于sql优化的一些点
  7. fiddler两种方式设置断点
  8. kubernets 单节点安装
  9. iOS 10.3下解决Fiddler代理抓包ssl证书信任问题
  10. poj 3258"River Hopscotch"(二分搜索+最大化最小值问题)
  11. Study 5 —— 流程控制
  12. [Cubieboard] 镜像资源汇总
  13. 4.1.4 Nim
  14. 【转】PHP之FastCGI与mod_php详解
  15. python---django中模板渲染(csrf令牌使用,自定义模板函数)
  16. 关于BufferefReader.readLine()方法的理解
  17. H5新特性---新应用
  18. Ubuntu中输入输出重定向及管道技术简述
  19. 《Python Machine Learning》索引
  20. Builder 模式初探

热门文章

  1. WPF 判断值是不是NaN
  2. 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子
  3. TCP网络通讯如何解决分包粘包问题(有模拟代码)
  4. aspnetboilerplate && .net core 使用原生sql
  5. jquery 选择标题标签
  6. 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)
  7. C# 声明基于角色的安全性
  8. block-chain java source
  9. WPF判断两个PNG图片是否碰撞
  10. Android Contact 导入导出 vcf格式(不依赖第三方库)