python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?
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的可变与不可变数据类型的原理是什么呢?相关推荐
- python中数据类型转换_Python(二).数据类型,数据类型转换
数据类型 在python中,能够直接处理的的数据类型有以下几种:(这里似乎说法不一样,我这里仅表示自己的观点) (1).数字(Number) (2).字符串(String) (3).布尔值(Bool) ...
- Python中数据类型转换
数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为两类,分别是自动数据类型转换 和 强制数据类型转换. 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不 ...
- Python 中数据类型转换
前两篇回顾: 第一篇:环境搭建以及运行 Python 的 3 种方式 第二篇:变量及数据类型 今天是 Python 基础系列第三篇:三种数据类型转换形式(布尔值转换.字符串转换.数值转换). 一.转为 ...
- python中数据可视化柱状图_python数据可视化,pyecharts柱状图绘制
一.pyecharts简介 pyecharts主要基于Web浏览器进行显示,绘制的图形比较多,包括折线图.柱状图.饼图.漏斗图 地图和极坐标图等.使用pyecharts绘图代码量很少,但绘制的图形比较 ...
- Python基础-数据类型转换,默认参数,关键字参数
Python基础-数据类型转换,文件操作,默认参数,关键字参数 1.数据类型之间转换 """ 数字型:int float bool compex 非数字型:list tu ...
- python的数据类型转换
python的数据类型转换函数 1.int() int():如果括号内没有值,给变量赋值0,如果有值,将float.bool.str类型的数据转换为int类型,float类型转换为int类型时去除小数 ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
- python批量转换数据类型_python中数据类型转换
1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "".join(test_list) 例子 ...
- python的六大数据类型中可以改变的数据类型为_Python中数据类型转换
数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为两类,分别是自动数据类型转换和 强制数据类型转换. 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不许 ...
最新文章
- 【转】sql if else 语句
- java按钮监听休眠_java-休眠监控解决方案
- GTD资源列表[070826更新] - [GTD]
- 网易2013校园招聘笔试题集锦
- jzoj2292-PPMM【模拟,堆】
- redis set时间单位_SpringBoot+Redis分布式锁:模拟抢单
- Python Day47索引
- 1022. Digital Library
- 给ubuntu设置静态ip —— How to set static IP Address in Ubuntu Server 16.04
- 关于启动Activity之间的及普通按钮的点击事件
- Java部署斗鱼直播,iOS斗鱼直播项目
- java怎么生成class文件_怎样将java的class文件生成jar包
- 【日语口语词典学习】第0002页
- easyUI datebox 日期只显示年月及年月日切换的实现 js样式重新渲染加载
- 笔记本处理器排名_【笔记本】AMD YES,霸占性能排行榜前四
- 关于android 电池的一些实用性探讨
- 【Vue.js】Vue 学习笔记
- Bernoulli Number
- android文件管理器u盘,Android U盘文件显示在文件管理器
- Java把带小数点的字符串转换成整数
热门文章
- java 线程 状态 图_Java提高——多线程(一)状态图
- 【nodejs】安装browser-sync 遇到错误提示
- [UWP]做个调皮的BusyIndicator
- 【u204】高级砝码称重
- bzoj1053: [HAOI2007]反素数ant
- MapReduce算法形式四:mapjoin
- 在Linux下不使用密码远程登陆其他Linux
- swagger core 和 swagger ui 如何关联【窥探】
- bzoj:2018 [Usaco2009 Nov]农场技艺大赛
- 在两个页面之间传递信息