一.is  和  ==  的区别:

1  .id()   内存地址

2.  ==   比较    #比较两边的值

3.   is    比较   #比较的是内存地址

  数字,字符串,有小数据池

  #数字小数据池 :    -5~256

  特点:节省内存

#.字符串中如果有特殊字符,那么不会添加到小数池中,他们的内存地址就不一样

字符串中单个*20以内他们的内存一样,超过20个就不会添加到小数据池;单个*以上内存地址就不一样  

  str : 1,不能有空格

2,长度不能超过20个字符

    3,不能有特殊字符如:#$@...

1.id ()  内存地址

1 # id() 内存地址
2 s = 'alex'
3 print(s,type(s),id(s))
4 # alex <class 'str'> 35619648
5 # alex <class 'str'> 32146240

2.==  比较的是值

3. is  比较的是内存地址

 3.1 列表,字典,元祖,set集合

1 # 列表、字典、元祖、set集合
2 l1 = [1,2,3]
3 l2 = [1,2,3]
4 print(l1 == l2) # True
5 print(id(l1),id(l2)) # 35680008 35679368
6 print(l1 is l2) #False
# 字符串、数字的特殊的。比较内存地址,pc看不出来,用cmd来查看s1 = 'alex  '
  3.2对于str 小数据池
# 范围
1.不能有空格。
2.长度不能超过20位。
3.不能有特殊字符。#@...
# 有空格指向的是False
>>> i = 'a'
>>> i1= 'a'
>>> print(i is i1)
True >>> s1 = 'alex '
>>> s2 = 'alex '
>>> print(s1 == s2)
True
>>> print(s1 is s2)
False >>> i = 'a b'
>>> i1= 'a b'
>>> print(i is i1)
False
# 超过20位则为False
>>> i = 'a'*20
>>> j = 'a'*20
>>> print(i is j)
True
>>> i = 'a'*21
>>> j = 'a'*21
>>> print(i is j)
False
1 # 有特殊字符也为False
2 >>> i = 'a@'
3 >>> j = 'a@'
4 >>> print(i is j)
5 False

  

3.3对于int 小数据池
#范围:
  -5---256 创建的相同的数字,都指向同一个内存地址。

>>> i = 6
>>> i1= 6
>>> print(i is i1)
True
>>> i = 258
>>> i1= 258
>>> print(i is i1)
False
>>> i = -5
>>> i1= -5
>>> print(i is i1)
True

 

# 我们发现,数字和字符串的数据地址是一样的. 列表和元组的数据地址是不一样的

.

二.编码和解码

encoude(编码方式)    -----拿到明文编码后对应的字节t

decode(编码方式)      -----将编码后的字节解码成对应的明文

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

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

编码回顾;

1.ASCII : 最早的编码,里面有英文大写字母,小写字母,数字,一些特殊字符,没有中文.

8 个bit(8位),1个 byte.

2.GBK : 中文国标码,里面包含了ASCII编码,1

    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或者CBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是bytes类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发生了改变而已。

bytes 的表现形式:

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

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

    # 编码:
s = "alex"
print(s.encode("utf-8")) # 将字符串编码成UTF-8,结果为:b'alex'
print(s.encode("GBK")) # 将字符串编码成GBK,结果为:b'alex' s = "中"
print(s.encode("UTF-8"))
print(s.encode("GBK"))
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")) #结果为:中
复制代码

  注意:用什么进行编码就要什么进行解码。

  记住:英文编码之后的结果是原字符串一致,中文编码之后的结果根据编码的不同,编码结果也不同,我们能肯定,一个中文UTF-8是3个字节。一个GBK的中文编码是2个字节。

python之is 和 == 的区别//编码和解码的更多相关文章

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

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

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

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

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

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

  4. is ==的区别 编码和解码

    1.n=0 n1=0 print(n==n1) ==>true  == 是比较两边的值 2.a="alex " b="alex" print(a==b)= ...

  5. python接口自动化测试十三:url编码与解码

    # url编码与解码 from urllib import parse url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=中文' a = '中文' b ...

  6. Python接口自动化--URL参数的编码和解码 6

    # _*_ coding:utf-8 _*_ #python2 import urllib #有时,需要从上一个请求的url获取参数,传到下一个请求中,中文会显示为编码的形式,这时候就需要进行解码 u ...

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

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

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

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

  9. python之编码与解码、is 与==的区别

    一.编码与解码 编码的过程其实就是采用一定的编码格式将unicode字符转换成str字符的过程 非ASCII码字符按字节为单位被编码成十六进制转义字符 解码采用的编码格式跟设置和环境有关 ascii ...

随机推荐

  1. enable nested VT in VM

    问题描述: 处理器支持VT-x,并且已经在BIOS中开启了VT-x.在host os上用VMware Workstation安装了一个Ubuntu虚拟机,在虚拟机中执行“cat /proc/cpuin ...

  2. 反向ssh

    参考 https://www.thegeekstuff.com/2013/11/reverse-ssh-tunnel/ https://www.howtoforge.com/reverse-ssh-t ...

  3. Go丨语言对数据库操作报错 panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.

    panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine ac ...

  4. VC++动态链接库(DLL)编程深入浅出(转帖:基础班)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  5. 【Shell】通配符与特殊符号

    ——来自<鸟哥的Linux私房菜> 在 bash 的操作环境中还有一个非常有用的功能,那就是通配符 (wildcard) ! 我们利用 bash 处理数据就更方便了!底下列出一些常用的通配 ...

  6. pod lib lint 报错 Unable to find a specification for `AMap2DMap` depended upon by `DingtalkPod

    执行 pod验证 报错如下 ➜  DingtalkPod git:(2.0.0) ✗ pod lib lint --sources='https://github.com/AloneMonkey/Mo ...

  7. UNR #1 火车管理

    很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵 ...

  8. BZOJ_3165_[Heoi2013]Segment_线段树

    BZOJ_3165_[Heoi2013]Segment_线段树 Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数 ...

  9. POJ1144(割点入门题)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11378   Accepted: 5285 Descript ...

  10. web.xml中:<context-param>与<init-param>的区别与作用及获取方法

    <context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件w ...