一、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中更改编码,需要在中文的开始编写:

    #-*- coding: 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类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发生了改变而已。

3,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")) # 结果为:中

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

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

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

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

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

  2. java中文乱码解决之道(五)-----java是如何编码解码的

    在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...

  3. url编码解码-js编码、C#编码

    JS编码解码 函数一定义和用法encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 U ...

  4. java中文乱码解决之道(五)—–java是如何编码解码的

    原文出处:http://cmsblogs.com/?p=1491 在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有 ...

  5. java是如何编码解码的

    在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...

  6. BOM / URL编码解码 / 浏览器存储

    BOM 浏览器对象模型 BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的 ...

  7. ajax请求参数中含有特殊字符"#"的问题 (另附上js编码解码的几种方法)

    使用ajax向后台提交的时候 由于参数中含有#  默认会被截断 只保留#之前的字符  json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...

  8. JavaScript中的编码解码

    1.URI 统一资源标识符(URI)是一个用于标识某一互联网资源名称的字符串.,该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作.Web上可用的每种资源 -HTML文档.图像 ...

  9. CKKS :Part1,普通编码/解码

    这篇文章,翻译于:[CKKS EXPLAINED: PART 1, VANILLA ENCODING AND DECODING] 主要介绍为CKKS中编码/解码做铺垫,讲一些基础知识 介绍 同态加密是 ...

  10. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...

随机推荐

  1. Hadoop 2.0 编译问题小结

    原文见 http://xiguada.org/hadoop-2-x-compile/ 这些问题是2013年初整理的,不过到目前为止,即使最新的hadoop2.0系列,编译总体上变化不大,因此还能适用. ...

  2. java大数模板

    java 大数计算   这几天做了几道用大数的题,发现java来做大数运算十分方便.对acmer来说是十分实用的 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3 ...

  3. PHP学习笔记(12)分页技术

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. yum安装的JDK的没有配置环境变量但是在/usr/bin下面都做了软链接

    [root@st152 /usr/bin]# ll |grep javalrwxrwxrwx    1 root root         22 Nov 28 22:14 java -> /et ...

  5. tuning 03 Sizing the Share pool

    share pool : (组成) library cache: stores shared sql and pl/sql code (包含 statement text, parsed code, ...

  6. Easyui datebox单击文本框显示日期选择

    Easyui默认是点击文本框后面的图标显示日期,为了更进一步优化体验 修改为单击文本框显示日期选择框 修改jquery.easyui.min.js(作者用的是1.3.6版本,其他版本或有区别) 可 c ...

  7. 推荐linux命令在线查,简约而不简单

    1.相关介绍: 网址:http://blog.51yip.com/linux/1518.html#more-1518 2.Linux 命令在线sce 网址:http://linux.51yip.com ...

  8. reactjs中props和state最佳实践

    http://blog.csdn.net/dangnian/article/details/50998981

  9. poj 2752 Seek the Name, Seek the Fame (KMP纯模版)

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13840   Ac ...

  10. Linux下自动调整时间和时区与Internet时间同步

    (原文链接) 调整linux系统时间和时区与Internet时间同步一.修改时区:# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改为中国的 ...