python基础4(小数据池,编码,深浅拷贝)

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]]

原文地址:https://www.cnblogs.com/walthwang/p/10361360.html

时间: 2024-10-09 09:25:19

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

Python基础之小数据池及深浅拷贝

一.小数据池 == (等于) == 官方:判断等号两边的内容是否相同 ? 白话:判断两个人长得是不是一样 is ? 官方:判断两边的内容是不是一个 ? 白话:判断这两个人是不是一个人 a = 10000 b = 10000 print(a == b) is 是通过内存地址进行判断 print(id(a),id(b)) 输出结果 ,内存地址一致 代码块:一个py文件,一个函数,一个模块,一个类,交互模式(终端)下的每一行 先执行代码块,然后小数据池! 代码块机制内容:Python在执行同一个代码块

小数据池 集合 深浅拷贝

小数据池 集合 深浅拷贝 一.小数据池 定义:小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址,支持数据类型:str,int,bool是一种缓存机制,特被称为驻留机制,各大编程语言中都有类似的东西. id() ----- 查看元素的内存地址 is 与 == 的区别 is 判断两个元素的内存地址是否相等 == 判断等号左右两边的元素的值是否相等 小数据池的规则 数字:-5~256 字符串: 字符串在做乘法(乘数不为1)的时候总长度不能超过20 自己定义的字符串的长度不受限

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

一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽然上面的缩进的内容都叫代码块,但是他不是python中严格定义的代码块.python中真正意义的代码块是什么? 块是一个python程序的文本,他是作为一个单元执行的.代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而对于一个文件中的两个函数,也分别是两个不同的代码块: def fu

python基础之小数据池

关于池的概念,大家也许知道 连接池,代理池.然而现在我们提到的小数据池,则是一些Int和string已经创建好的并放在池子里等着我们去调用的对象. '''对于整数,Python官方文档中这么说: The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just

python入门(四)小数据池、深浅拷贝、集合

3.8 小数据池 小数据池:缓存机制(驻留机制) ==(用于判断两边的内容是否相等) a=10 b=10 print(a==b)# ==用于判断两边的内容是否相等 is(用于判断两边内存地址是否相等) a=10 b=10 print(a is b) #输出 True #小数据池总结 #1.数字范围:-5~256 #2.字符串: """ 1.同一代码下,内容相同则内存地址相同 2.乘法相乘总长度不能超过20 3.惩罚的时候中文.特殊符号乘以0 """

小数据池和深浅拷贝

小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于一个字符时会缓存 超过一个字母但是只有下划线,字母,数字组成也会缓存 如果字符串乘法,那小于等于20个就会缓存,超过则开辟新的内存 手动缓存,需要调用工具 from sys import intern a=intern("[email protected]"*5) b=intern(&qu

python 浅谈小数据池和编码

?. ?数据池 在说?数据池之前. 我们先看?个概念. 什么是代码块: 根据提示我们从官??档找到了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class definiti

python之路(内存,小数据池,编码等)

代码块: python真正的代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 但是,在python终端交互模式下,每一条代码都是一个代码块 python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中, 如果下面的代码在遇到初始化对象的命令,他会先从字典中寻找,如果存在相同的值,他会复用,指向的都是同一个内存地址. >>> i1 = 1000 可以理解为这一行在一个文件中. >>> i2 = 1000 可以理解为这一行在另

python之路---06 小数据池 编码

二十二.小数据池, id()    进行缓存 1.小数据池针对的是: int, str, bool 2.在py文件中几乎所有的字符串都会缓存.   在cmd命令窗口中几乎都不会缓存   不同的解释器有不同的机制 3.id() 查看变量的内存地址 4. is和==的区别 is 比较的是内存地址 == 比较的是内容 当两个变量指向同一个对象的时候. is是True, ==也是True 5. 优点:快速创建对象,节省内存 缺点:缓存如果过大,影响速度会比较慢 二十三. 再谈编码 回顾: 1. asci

Python 代码块 小数据池

一  代码块 什么是代码块??? Python程序是由代码块构造的.先举一个例子: 1 for i in '12334567': 2 print(i) 1 def func(): 2 print('Hello,world!') 1 class A: 2 name = 'colin' 从上面的例子可以称为代码块,虽然上面的缩进的内容都叫代码块,但是他们并不是python中严格定义的代码块. 那么,python中真正意义上的代码块又怎么定义? 因此,我们定义:一个模块,一个函数,一个类,一个文件等都