Python中变量的进阶知识:

涉及到Python的对象知识。

即:可变对象和不可变对象。题目中的可变和不可变数据类型,表述不准确。

Python中,一切皆对象。

对象是一种抽象。抽象是什么?抽象就是一种概念上的简化。

《learning python》中的一个观点:变量无类型,对象有类型。

对象包括三个元素:ID、Type、Value。

ID:是对象在内存的地址。

Type:是对象的类型。

Value:是对象的值。

以 整数 1 作为对象为例:

1.将对象 1 赋值引用给变量 a:(变量对对象是一种引用)

a = 1

2.不用声明数据类型,python自动识别为整数 int 1。

>>> a=1

>>> type(a)

3.对象 1 此时的 value数值 是1。

4.对象 1 的内存地址(变量引用的内存地址id):

>>> a=1

>>> id(a)

4433791280

所以改变一个对象,有三种方式:改变value值、改变type数据类型、改变id内存地址的引用。

抛开type数据类型,因为数据类型通过int()str()可以直接转换。

只讨论value和id。

不可变对象:是什么不可变呢?

可变对象:是什么可变呢?

上面的对象: 整数 1 ,

可以被无数的变量a,b,c,d,apple,进行赋值引用。

但是,

对象 1 在内存地址的引用却没有变化。

对象本身没有因为变量的赋值引用,而发生任何变化。

所以是不可变对象。

>>> a =1

>>> b =1

>>> c =1

>>> d =1

>>> apple =1

>>> id(a)

4399315248

>>> id(b)

4399315248

>>> id(c)

4399315248

>>> id(d)

4399315248

>>> id(apple)

4399315248

除非新建一个对象 2,

在用变量a,b,c,来赋值引用对象2。

>>> a=2

>>> b=2

>>> c=2

>>> id(a)

4433791312

>>> id(b)

4433791312

对比下对象1 和对象2的内存地址的差别:

>>> id(1)

4433791280

>>> id(2)

4433791312

对象1 和对象2 ,虽然变量各种变化,但是各自的内存地址并未改变。

所以,整数型int 的对象,为不可变对象。

可变对象

对象 :列表 [1,2,3]

可以被无数的变量a,b,c,d,apple,进行赋值引用。

对象 [1,2,3] 和对象 [1,2,3] ,虽然看起来都是对象 [1,2,3] ,但所在内存地址的引用,都不相同。

对象本身看似相同,实则内存地址完全不同(不同变量对看似同一对象的赋值引用到的内存地址不同)。

所以,是可变对象。

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

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

>>> id(a)

4560147392

>>> id(b)

4518877376

关于可变对象的引用拷贝:

对比两段代码:

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

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

>>> id(a)

4560147392

>>> id(b)

4518877376

>>> b.append(5)

>>> print(b)

[1, 2, 3, 5]

>>> print(a)

[1, 2, 3]

和代码二:

a=[1,2,3]

>>> b=a

>>> b.insert(0,9)

>>> print(b)

[9, 1, 2, 3]

>>> print(a)

[9, 1, 2, 3]

>>> id(a)

4561102848

>>> id(b)

4561102848

可变对象中,第二段代码,关于list的浅拷贝:

浅拷贝:

待补充

python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?相关推荐

  1. python中数据类型转换_Python(二).数据类型,数据类型转换

    数据类型 在python中,能够直接处理的的数据类型有以下几种:(这里似乎说法不一样,我这里仅表示自己的观点) (1).数字(Number) (2).字符串(String) (3).布尔值(Bool) ...

  2. Python中数据类型转换

    数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为两类,分别是自动数据类型转换 和 强制数据类型转换. 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不 ...

  3. Python 中数据类型转换

    前两篇回顾: 第一篇:环境搭建以及运行 Python 的 3 种方式 第二篇:变量及数据类型 今天是 Python 基础系列第三篇:三种数据类型转换形式(布尔值转换.字符串转换.数值转换). 一.转为 ...

  4. python中数据可视化柱状图_python数据可视化,pyecharts柱状图绘制

    一.pyecharts简介 pyecharts主要基于Web浏览器进行显示,绘制的图形比较多,包括折线图.柱状图.饼图.漏斗图 地图和极坐标图等.使用pyecharts绘图代码量很少,但绘制的图形比较 ...

  5. Python基础-数据类型转换,默认参数,关键字参数

    Python基础-数据类型转换,文件操作,默认参数,关键字参数 1.数据类型之间转换 """ 数字型:int float bool compex 非数字型:list tu ...

  6. python的数据类型转换

    python的数据类型转换函数 1.int() int():如果括号内没有值,给变量赋值0,如果有值,将float.bool.str类型的数据转换为int类型,float类型转换为int类型时去除小数 ...

  7. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  8. python批量转换数据类型_python中数据类型转换

    1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "".join(test_list) 例子 ...

  9. python的六大数据类型中可以改变的数据类型为_Python中数据类型转换

    数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为两类,分别是自动数据类型转换和 强制数据类型转换. 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不许 ...

最新文章

  1. 【转】sql if else 语句
  2. java按钮监听休眠_java-休眠监控解决方案
  3. GTD资源列表[070826更新] - [GTD]
  4. 网易2013校园招聘笔试题集锦
  5. jzoj2292-PPMM【模拟,堆】
  6. redis set时间单位_SpringBoot+Redis分布式锁:模拟抢单
  7. Python Day47索引
  8. 1022. Digital Library
  9. 给ubuntu设置静态ip —— How to set static IP Address in Ubuntu Server 16.04
  10. 关于启动Activity之间的及普通按钮的点击事件
  11. Java部署斗鱼直播,iOS斗鱼直播项目
  12. java怎么生成class文件_怎样将java的class文件生成jar包
  13. 【日语口语词典学习】第0002页
  14. easyUI datebox 日期只显示年月及年月日切换的实现 js样式重新渲染加载
  15. 笔记本处理器排名_【笔记本】AMD YES,霸占性能排行榜前四
  16. 关于android 电池的一些实用性探讨
  17. 【Vue.js】Vue 学习笔记
  18. Bernoulli Number
  19. android文件管理器u盘,Android U盘文件显示在文件管理器
  20. Java把带小数点的字符串转换成整数

热门文章

  1. java 线程 状态 图_Java提高——多线程(一)状态图
  2. 【nodejs】安装browser-sync 遇到错误提示
  3. [UWP]做个调皮的BusyIndicator
  4. 【u204】高级砝码称重
  5. bzoj1053: [HAOI2007]反素数ant
  6. MapReduce算法形式四:mapjoin
  7. 在Linux下不使用密码远程登陆其他Linux
  8. swagger core 和 swagger ui 如何关联【窥探】
  9. bzoj:2018 [Usaco2009 Nov]农场技艺大赛
  10. 在两个页面之间传递信息