1、==与is

  • == 比较值是否相等
  • is比较内存地址是否相同

2、小数据池

  • 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址
  • 数字范围:-5 ~ 256
  • num1 = 3
    num2 = 3
    i1 = id(num1)
    i2 = id(num2)
    #此时i1==i2

3、编码

  • ascii:     8位       1字节     表示一个字符
  • unicode:  32位     4字节     表示一个字符
  • utf-8
    • 英文    8位    1字节
    • 欧洲    16位  2字节
    • 亚洲    24位  3字节
  • gbk
    • 英文   8位    1字节
    • 中文   16位  2字节
  • 各个编码之间的二进制,是不能互相识别的,会产生乱码
  • 文件的传输,存储不能是unicode(只能是utf-8、utf-16、gbk、gb2312、ascii等)
  • python3中str是使用unicode编码的

4、深浅拷贝

  • 原因:共享内存导致的结果
  • 如果通过赋值,使两个变量指向同一个内存地址(可变数据类型),则修改其中的一个,另一个也会跟着修改。如果是不可变数据类型(如字符串),修改一个另一个不会变
    li1 = [1,2,3]
    li2 = li1 li2[0] = 2
    print(li) # -> [2,2,3]
  • 浅拷贝:数据半共享,复制的数据独立存放在其他内存中,但是只复制第一层。如果是列表等可变数据类型,拷贝的是内存地址,所以修改这类元素,还是会全都改变
    li1 = [1,2,3,[4,5]]
    
    li2 = li1.copy()
    
    #修改第一层
    li2[0] = 3 #此时:li2 = [3,2,3,[4,5]]
    #但li1未更改:li1 = [1,2,3,[4,5]] #修改其中的列表
    li2[3][1] = 9 #此时:li2 = [3,2,3,[4,9]]
    #li1对应元素修改:li1 = [1,2,3,[4,9]]

    从内存来看:

  • 深拷贝:数据完全不共享,复制的数据完全独立放到另一个内存中,包括可变数据类型的内容
    import copy    #使用深拷贝需要导入copy
    li1 = [1,2,3,[4,5]] li2 = copy.deepcopy(li1) #深拷贝 #此时修改li2的所有元素,li1都不会改变
    li2[3][0] = 777 #li1仍是[1,2,3,[4,5]]

python基础4(小数据池,编码,深浅拷贝)的更多相关文章

  1. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  2. python基础知识四 小数据池,深浅拷贝,集合+菜中菜

    四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) ​ '==' 判断两边内容是否相等 ​ 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...

  3. 6.Python初窥门径(小数据池,集合,深浅拷贝)

    Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...

  4. Python 入门之代码块、小数据池 与 深浅拷贝

    Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...

  5. python基础之小数据池、代码块、编码和字节之间换算

    一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...

  6. python基础之小数据池、代码块、编码

    一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...

  7. python基础之小数据池,is和==区别 编码问题

    主要内容 小数据池,is和==区别 编码问题 小数据池 一种缓存机制,也称为驻留机制,是为了能更快提高一些字符串和整数的处理速度is 和 == 的区别 == 主要指对变量值是否相等的判断,只要数值相同 ...

  8. Python基础篇 -- 小数据池和再谈编码

    小数据池 1. id() 通过id()可以查看到一个变量表示的值在内存中的地址 s = "Agoni" print(id(s)) # 2410961093272 2. is 和 = ...

  9. python基础之小数据池

    一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = '太白' print(id(name)) # 158583128 ...

  10. python的小数据池和深浅拷贝

    小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于 ...

随机推荐

  1. TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤

    一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...

  2. javascript编程风格(粗略笔记)

    1.空格 紧凑型: project.MyClass = function(arg1, arg2){ 松散型: for( i = 0; i < length; i++ ){ 2.代码行长度 最多8 ...

  3. HDU 2049 不容易系列之(4)——考新郎( 错排 )

    链接:传送门 思路:错排水题,从N个人中选出M个人进行错排,即 C(n,m)*d[m] 补充:组合数C(n,m)能用double计算吗?第二部分有解释 Part 1. 分别求出来组合数的分子和分母然后 ...

  4. df与du查看磁盘空间使用不一致的解决方法

    近一段时间,某台服务器的磁盘空间使用不太正常,与其他的服务器相比,严重超出磁盘空间使用 使用df与du相关命令查看,具体结果如下: du -hFilesystem       Size  Used A ...

  5. Unity 多场景打包

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50580641 作者:car ...

  6. java的反射机制(重要)

    1,反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  7. ASP.NET-HttpPostedFileBase file为null的问题

    MVC使用Ajax.BeginForm上传图片时HttpPostedFileBase file为null,Request.Files获取不到文件,问题分析是页面中存在jquery.unobtrusiv ...

  8. 在对Activity基类的封装中,我做了什么

    在开发实践中,不同Activity有很多代码是反复冗余的.因此非常有必要将这部分抽取出来.封装一个继承自Activity的类,命名为BaseActivity. 翻看之前写过的代码,起初,BaseAct ...

  9. Unity3d修炼之路:用Mesh绘制一个Cube

    #pragma strict function Awake(){ var pMeshFilter : MeshFilter = gameObject.AddComponent(typeof(MeshF ...

  10. 弹性ScrollView,和下啦刷新的效果相似 实现下拉弹回和上拉弹回

    今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个非常多需求都用的这样的效果 事实上这是一个自己定义的scrollView,上代码.这是我写在一个公共的组件包里的 package c ...