day_6

1. is 和 == 的区别:
id(变量)返回给你这个变量的内存地址.

s = 'alex'
print(id(s)) # 4326667072
s = "alex"
print(id(s)) # 4326667072

lst = [1, 2, 4]
print(id(lst)) # 4326685768
lst1 = [1, 2, 4]
print(id(lst1)) # 4326684360

我们发现. 字符串的数据地址是一样的. 而列表的数据地址是不一样的.

小数据池(常量池): 把我们使用过的值存储在小数据池中.供其他的变量使用.
小数据池给数字和字符串使用, 其他数据类型不存在.
对于数字: -5~256是会被加到小数据池中的. 每次使用都是同一个对象.

对于字符串:
1. 如果是纯文字信息和下划线. 那么这个对象会被添加到小数据池
2. 如果是带有特殊字符的. 那么不会被添加到小数据池. 每次都是新的
3. 如果是单一字母*n的情况. 'a'*20, 在20个单位内是可以的. 超过20个单位就不会添加
到小数据池中


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


is 比较是的内存地址 注意. 这个双等比较的是具体的值.而不是内存地址

s1 = "哈哈"
s2 = "哈哈"
print(s1 == s2) # True
print(s1 is s2) # True 原因是有⼩数据池的存在 导致两个变量指向的是同⼀个对象
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 == l2) # True, 值是⼀样的
print(l1 is l2) # False, 值是假的

 

== 比较的是值

2. 编码
ASCII 8bie 1byte 英文小写大写字母 特殊字符 数字
GBK 16bie 2byte 中文 兼容ASCII
UNICODE 32bie 4byte 万国码 占空间 浪费
UTF-8 是unicod的升级版 英文 1bety 中文3 bety

传输过程中用:UTF-8或者GBK,unicod 浪费资源
存货中,我们程序运行的过程中, 编码是unicode
转换的时候 GBK不能和UTF-8相互转换.

在程序中,字符串可以编码成bytes类型的数据
编码encode()
编码之后的结果和原来的结果其实是一样的东西,只是看着不一样

posted on 2018-06-06 15:27  夜空中最亮的太阳  阅读(80)  评论(0编辑  收藏  举报

导航