is和==的区别

1. id()

id是python的一个内置函数,通过id()可以查看变量表的值在内存中的地址。

s1 = 2
print(id(s1)) # 1514368064
s2 = 2
print(id(s2)) # 1514368064 s3 = 'alex'
print(id(s3)) # 43156680
s4 = "alex"
print(id(s4)) # 43156680 lst = [1, 2, 4]
print(id(lst)) # 43164168
lst1 = [1, 2, 4]
print(id(lst1)) # 41362568 tup = (1, 2)
tup1 = (1, 2)
print(id(tup)) #39978312
print(id(tup1)) #39978376 # 我们发现,数字和字符串的数据地址是一样的. 列表和元组的数据地址是不一样的.

小数据池(常量池):把我们使用过的值存储在小数据池中,供其他数据使用。

小数据池给数字和字符串使用,其他数据类型不存在。

对于数字:-5~256是会被加到小数据池中的,每次使用都是同一个对象。

对于字符串:

1,如果是带特殊字符的,那么不会被添加到小数据池,每次都是新的;

2,如果是单一字母*n的情况,如"a"*20,在20个单位内(包含20个)是可以的,超过20个单位就不会添加到小数据池;

注意(一般情况下):在py文件中,如果你只是单纯的定义一个字符串,那么一般情况下都会被添到小数据池中,我们可以这样认为:在使用字符串的时候,python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多内存。

  这个问题千万不要纠结,因为官方没有给出一个完美的结论和定论,所以只能是自己摸索。

说了这么多,这个id( )和is有什么关系呢?注意,is比较的就是id( )计算出来的结果,由于id( )是帮我们查看某数据(对象)的内存地址,那么is比较的就是数据(对象)的内存地址,即我们通过is可以查看两边使用的是否是同一个对象。

双等(==)表示的是判断是否相等,注意,这个双等比较的是具体的值。

总结:==比较的是两边的值是否一样;is比较的是内存地址是否一样,即是不是同一个对象。

编码问题

1. 关于python2的编码问题:

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

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

2. 编码回顾

    1,ASCII:最早的编码,里面有英文大写字母,小写字母,数字,一些特殊字符,没有中文。8个bit(位),1个byte(字节)。

2,GBK:中文国标码,里面包含了ASCII编码,16个bit,2个byte。

3,unicode:万国码,里面包含了全世界所有国家的文字编码,32个bit,4个byte,包含了ASCII。

4,UTF-8:可变长度的万国码,是unicode的一种实现,最小字符占8位

 英文:8bit  1byte

    欧洲文字:16bit  2byte

    中文:24bit  3byte

  综上,除了ASCII码以外,其他信息不能直接转换。

  在python3的内存中,在程序运行阶段使用的是unicode编码,因为unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于unicode比较浪费空间和资源,需要把unicode转存成UTF-8或者GBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是bytes类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发生了改变而已。

总结:

	ASCII码英文占8位  1个字节
Unicod英文占32位 4个字节
Unicode中文占32位 4个字节
utf8英文占8位 1个字节
utf8中占16位 2个字节
gbk英文占8位 1个字节
gbk中文占16位 2个字节

bytes的表现形式

1,英文 b'alex',英文的表现形式和字符串没什么两样;

2,中文b'\xe4\xb8\xad',这是一个汉字的UTF-8的bytes表现形式;

# 编码:
s0 = "alex"
print(s0.encode("utf-8")) # 将字符串编码成UTF-8,结果为:b'alex'
print(s0.encode("GBK")) # 将字符串编码成GBK,结果为:b'alex' s = "中"
s1 = s.encode("UTF-8") # 中文编码成UTF-8,结果为:b'\xe4\xb8\xad'
s2 = s.encode("GBK") # 中文编码成GBK,结果为:b'\xd6\xd0' # 解码:
print(s1.decode("UTF-8")) # 结果为:中
print(s2.decode("GBK")) # 结果为:中

==和is的区别 以及编码和解码的更多相关文章

  1. python基础小知识,is和==的区别,编码和解码

    1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...

  2. is和==的区别以及编码和解码

    一.is和==的区别 python中对象包含的三个基本要素分别是:id(身份标识),type(数据类型),value(值) is和==都是对对象进行比较判断的,但对对象比较判断的内容不同. ★==是p ...

  3. python中is与==的区别,编码和解码

    在介绍is与==的区别前,我们先来了解一些新的知识:内存地址.小数据池. 1.内存地址(is 比较的就是内存地址) 获取内存地址的方法:id() a = "str" 2.小数据池 ...

  4. is和==的区别以及编码、解码

    一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s1 = 2 print(id(s1)) # 15143680 ...

  5. python全栈开发 随笔 'is' 和 == 的比较知识与区别 编码和解码的内容及转换

    python 一. is 和 == 的区别; == 比较的是两边的值. a = 'alex' b = 'alex' print(a = b) #True a = 10 b = 10 print(a = ...

  6. is 与 == 的区别;小数据池; 编码与解码

    1, is 与 == 的区别 ==  比较的是两边的值 is   比较的是两边的地址  id () 2,小数据池(在终端中) 数字小数据池的范围 -5 ~ 256 字符串中如果有特殊字符他们的内存地址 ...

  7. Python is 和 == 的区别, 编码和解码

    一.is 和 == 的区别 is : 进行比较,比较的是内存地址是否一致 ==:进行比较,比较的是值是否相等 1.小数据池: 数字小数据池范围 -5~256 字符串中如果有特殊字符则他们的内存地址不一 ...

  8. python is == 的区别, 编码与解码.深浅拷贝

    一. is  ==  的区别 双等表示的是判断是否相等, 注意. 这个双等比较的是具体的值.而不是内存地址 is 比较的是地址 编码回顾 除了了ASCII码以外, 其他信息不能直接转换 编码和解码的时 ...

  9. python之is 和 == 的区别//编码和解码

    一.is  和  ==  的区别: 1  .id()   内存地址 2.  ==   比较    #比较两边的值 3.   is    比较   #比较的是内存地址 数字,字符串,有小数据池 #数字小 ...

随机推荐

  1. redis 管理工具

    1.redis studio 2.redis desktop manager

  2. visualSVN提交强制添加注释

    Visual SVN Server下 右键项目  “所有任务”>“Manage Hooks” >选中Pre-commit hook然后edit编辑,添加如下代码 @echo off set ...

  3. 一种局部二值化算法:Sauvola算法

    之前接触过全局二值化(OTSU算法),还有OPENCV提供的自适应二值化,最近又了解到一种新的局部二值化算法,Sauvola算法. 转载自:http://www.dididongdong.com/ar ...

  4. Spring的应用上下文ApplicationContext

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes() ...

  5. Dubbo分布式服务框架入门(附工程)

    要想了解Dubbo是什么,我们不防先了解它有什么用. 使用场景:比如我想开发一个网上商城项目,这个网上商城呢,比较复杂,分为pc端web管理后台,微信端销售公众号,那么我们分成四个项目,pc端网站,微 ...

  6. laravel 使用PhantomMagick导出pdf ,在Linux下安装字体

    git项目地址:https://github.com/anam-hossain/phantommagick sudo apt-get -y install fontconfig xfonts-util ...

  7. es为什么要取消type? 或者为什么一个index下多个type会有问题

    同一个index下的不同的type下的相同的filed,在同一个index下其实会被认为是同一个filed. 否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降

  8. vue路由高级用法

    五.路由设置高级用法alias 别名 {path:'/list',component:MyList,alias:'/lists'}redirect 重定向 {path:'/productList',r ...

  9. note.js使用express创建项目的步骤以及ip和端口配置

    1.安装express npm install -g express 2.创建项目 express -e 项目名称 3.打开cmd进入项目目录安装依赖 npm install 4.打开配置文件./bi ...

  10. iview报错[Vue warn]: Error in render: "TypeError: ctx.injections.tableRoot.$scopedSlots[ctx.props.column.slot] is not a function"

    原因是我使用了iview的<Table>组件,我给Table组件的columns中定义了4个含有slot的列,但是实际在<Table>中只使用了其中3个,导致的报错. 也就是说 ...