Python基础六 内存(id)编码进阶

Posted 忆殇★伤忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础六 内存(id)编码进阶相关的知识,希望对你有一定的参考价值。

一.内存(id)

1.查询内存地址(id)

name = alex
print(id(name))

li = [1,2,3]
print(id(li))

每次输出的结果都是不同的

2.判断是否是同一内存地址(is)

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> name1 = [email protected]
>>> name2 = [email protected]
>>> print(name1 == name2)
True
>>> print(name1 is name2)
False
>>>

 

二.小数据池    int str

int    -5 ---256

str   如果是全部由字母组成的字符串 都是指向一个内存地址.
如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址.
其他数据类型 则没有小数据池概念.

 

三.编码进阶

1.Unicode:万国码(32位)

2.utf—8:用最少8位表示一个字符

3.gbk:国标

1,不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
2,在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).

py3中:
字符串:编码方式(在内存中的运行方式):默认都是unicode.

int

byte
对于非中文: 表现形式: b‘alex‘
内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.

对于中文: 表现形式: b‘xe3\xf2\x36\xe3\xf2\x36\‘
内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.

技术分享图片
s = alex
s1 = balex
print(s.capitalize())             #输出结果:Alex
print(s1.capitalize())            #输出结果:b‘Alex‘

str ---> bytes

英文:

s = alex
b = s.encode(utf-8)
b1 = s.encode(gbk)
print(s,type(s))            #输出结果:alex <class ‘str‘>
print(b,type(b))            #输出结果:b‘alex‘ <class ‘bytes‘>
print(b1,type(b1))          #输出结果:b‘alex‘ <class ‘bytes‘>

中文:
s = 中国
b = s.encode(utf-8)
b1 = s.encode(gbk)
print(s,type(s))           #输出结果:中国 <class ‘str‘>
print(b,type(b))           #输出结果:b‘\xe4\xb8\xad\xe5\x9b\xbd‘ <class ‘bytes‘>
print(b1,type(b1))         #输出结果:b‘\xd6\xd0\xb9\xfa‘ <class ‘bytes‘>
View Code

 

str
对于非中文: 表现形式: ‘alex‘
内部编码: unicode
对于中文: 表现形式: ‘中国‘
内部编码: unicode

bool 

list

tuple

dict

 












以上是关于Python基础六 内存(id)编码进阶的主要内容,如果未能解决你的问题,请参考以下文章

Python之第七天的努力--基础数据类型补充,编码进阶

python基础--小知识点汇总及编码进阶

18/5/4 小数据池,编码的进阶

Python基础:变量进阶(理解)函数进阶

Python基础:变量进阶(理解)函数进阶

python进阶之垃圾回收