一、小数据池

  1.id()

  小数据池针对的是:int ,str,boo(都是不可变的数据类型)

  (1)如果是在py文件中写的字符串,几乎都是缓存的

  (2)在黑窗口里写的机会都不会缓存

  (3)不同的解释器,缓存的机制也不一样

    优点:

       可以帮我们快速的创建对象,节省内存

    缺点:
       缓存如果过大,反应速度会比较慢

  在py文件中几乎所有的字符串都会缓存,id()查看变量的内存地址

s = "alex"
print(id(s))

  

  2. is 和 ==

   ==判断左右两端的值是否相等,不不是一致。

   is判断左右两端内容的内存地址是否一致,如果返回True,哪可以确定这两个变量使用的是同一个对象

 lst1 = [1,2,3]
lst2 = [1,2,3]
# # 列表没有小数据池
print(id(lst1), id(lst2)) # 166167560 166126408
print(lst1 == lst2) # True
print(lst1 is lst2) # False
#
s1 = "我叫周润发"
s2 = "我叫周润发"
print(s1 == s2)
print(s1 is s2) # 小数据池 tu1 = ("周一", "周二")
tu2 = ("周一", "周二")
print(tu1 is tu2) # 地址不相等 False
print(tu1 == tu2) # 内容相等 True # == 比较的是内容
# is 比较内存地址

二、编码的补充

  1.python2中默认的使用的是ASCII码,所以不支持中文,如果需要在python2中更改编码需要在文件的开始编写:

# -*- encoding:utf-8 -*-

  2.python3中:内存中使用的是Unicode码。

  编码回顾:

    1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂,
    8个01代码, 8个bit, 1个byte
    2. GBK: 中⽂国标码, ⾥⾯包含了ASCII编码和中⽂常⽤编码. 16个bit, 2个byte
    3. UNICODE: 万国码, ⾥⾯包含了全世界所有国家⽂字的编码. 32个bit, 4个byte, 包含了
    ASCII
    4. UTF-8: 可变⻓度

   bytes的表现形式:

   1. 英⽂ b'alex' 英⽂的表现形式和字符串没什么两样

   2. 中⽂ b'\xe4\xb8\xad' 这是⼀个汉字的UTF-8的bytes表现形式

  编码:

    encode(utf-8/gbk):编码,把字符串转化成utf-8/gbk格式bytes

    decode(utf-8/gbk):解码,把bytes解码成字符串

   utf-8和gbk是不能直接转换的, 必须使用unicode来转换

s = "我今天非常的困" # 21个utf-8
bs = s.encode("gbk") # 把字符串转化成utf-8格式bytes
# # bytes不是给人看的. 给机器用的
# # 14个字节 gbk
b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
# # 21个字节 utf-8
# # b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
print(bs)

  

    把字节转化回字符串

bs = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
s = bs.decode("utf-8")
print(s)

    

    关于bytes, 非ascii中的内容. 展示的时候都是\x.. 如果是ascii中的内容. 原样输出

      

name = "alex昨天吃多了"
bs = name.encode("gbk") # b'alex\xd7\xf2\xcc\xec\xb3\xd4\xb6\xe0\xc1\xcb'
print(bs) bss = name.encode("utf-8") # b'alex\xe6\x98\xa8\xe5\xa4\xa9\xe5\x90\x83\xe5\xa4\x9a\xe4\xba\x86'
print(bss)

  

    

   

小数据池 is 和 == ,以及再谈编码的更多相关文章

  1. python的小数据池 is和== 以及再谈编码

    ---恢复内容开始--- 1. 小数据池, id() 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址 # a = 10 # b ...

  2. 《Python》 代码块、小数据池和编码转换

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...

  3. python之路--小数据池,再谈编码,is和 == 的区别

    一 . 小数据池 # 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. # id() 查看变量的内存地址 s = 'attila' print(id(s)) 二 ...

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

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

  5. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

  6. python -- 小数据池 is和 == 再谈编码

    1.小数据池 python程序是由代码块构成的,一个代码块的文本作为python程序的执行单元. 代码块:一个模块,一个函数,一个类,甚至一个command命令都是一个代码块,一个文件也是一个代码块, ...

  7. day06 小数据池,再谈编码

    今日所学 一.  小数据池 二.  is 和==的区别 三.  编码的问题 一.小数据池的作用 用来缓存数据 可以作用的数据类型: 整数(int), 字符串(str), 布尔值(bool). 什么是块 ...

  8. day 006 小数据池和再谈编码

    1.小数据池. 目的:缓存我们的字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存: int str bool int 范围:-5~256 str: 1.长度小于等于1,直接缓存 2.长度大 ...

  9. python小数据池 is和 == 再谈编码

    1. 小数据池, id() 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址 2. is和==的区别 is 比较的是内存地址 == ...

随机推荐

  1. jqentitydetail

    using System;using System.Collections;using System.Collections.Generic;using System.Linq;using Syste ...

  2. HDU 3333 Turing Tree (主席树)

    题意:给定上一个序列,然后有一些询问,求区间 l - r 中有多少个不同的数的和. 析:和求区间不同数的方法是一样,只要用主席树维护就好. 代码如下: #pragma comment(linker, ...

  3. Slf4j MDC 使用和 基于 Logback 的实现分析

    前言 如今,在 Java 开发中,日志的打印输出是必不可少的, 关于  有了日志之后,我们就可以追踪各种线上问题.但是,在分布式系统中,各种无关日志穿行其中,导致我们可能无法直接定位整个操作流程.因此 ...

  4. wcf文件上传时碰到的配置问题

    1.远程服务器返回了意外相应:(413) Request Entity Too Large 修改客户端配置maxReceivedMessageSize="2147483647" & ...

  5. duilib入门简明教程 -- 响应按钮事件(4)

       上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI;     也就是说,其实那整块绿色背景区域都是按钮的区域.(这里简要介绍 ...

  6. SICP练习1.6的解答

    cond和if有着同样的效果,为啥用cond实现的new-if不能用于一些函数? 我自己没想明白,在网上搜集了一下答案,部分解答觉得有道理,整理如下: 解答1: if和cond都是特定的求值顺序, 即 ...

  7. C# socket请求的名称有效 但是找不到请求的类型的数据

    程序以前在xp下运行一直良好,但将安装在win7下面却出现"请求的名称有效 但是找不到请求的类型的数据"错误,程序底层通信是基于socket,时间久了就会出现系统黑屏死机,但并不知 ...

  8. WinForm中DataGridView的使用(六) - 特殊处理的小地方

    列标题不能居中的解决方法 一般列标题的居中我们都使用this.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignmen ...

  9. 以太坊系列之十八: 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  10. MultiDataTrigger

    MultiDataTrigger是多条件数据触发器 和MltiTrigger是同样的,只不过前者是数据,后者是属性. 这个是基本的使用语法 <MultiDataTrigger> <M ...