python:基础数据类型(四)

一、字符串编码

1、简介

计算机其实是只认识0和1的,我们编写的代码,要让计算机认识,中间涉及到字符转换为数字0和1的过程,这个过程实际上就是一个字符如何对应一个特定的数字标准,这个标准就称之为字符编码。

0/1 = 1bit

1byte = 8 bit # 计算机的最小存储单位 0-255的数值。

1、为了处理英文字符,产生了ascii码

2、为了处理中文字符,产生了GBK

3、为了处理各国字符,产生了Unicode

4、为了提高存储和传输性能,产生了utf-8

2、python3下字符编码使用情况

1、Unicode:简单粗暴,所有字符都是2bytes,优点:字符–>数字的转换速度快;缺点:占用空间大

2、utf-8:精准,对不同的字符用不同的长度表示,优点:节省空间;

缺点:字符–>数字的转换速度慢

3、python3中字符编码实际类型使用

1、内存中使用的是Unicode,用空间换时间

2、硬盘中或者网络传输用utf-8,尽可能节省带宽,保证数据传输的稳定性

4、编码(encode)和解码(decode)

1、编码(encode):将Unicode转换为其他指定的编码

2、解码(decode):将原编码转换为Unicode编码

s = '中'    # 当程序执行时,字符会以Unicode形式保存到内存空间中

# 1.编码
s1 = s.encode('utf-8')
s2 = s.encode('gbk')
print(s)
print(s1)
print(s2)
print(type(s))    # <class 'str'>
print(type(s1))    # <class 'bytes'>
print(type(s2))    # <class 'bytes'>

# 2.巩固
a = '你好中国'
# 2.1Unicode-->gbk
unicode_gbk = a.encode('gbk')
print(unicode_gbk)

# 2.2Unicode-->utf-8
unicode_utf8 = a.encode('utf-8')
print(unicode_utf8)

# 2.3gbk-->utf-8
gbk_utf8 = unicode_gbk.decode('gbk').encode('utf-8')
print(gbk_utf8)

# 3.总结
"""
1、各个编码的相互转换都要先转换为Unicode,通过Unicode再转其他编码
2、gbk不只这一个
"""
print('中国'.encode(encoding = 'utf-8'))    # 输出结果:b'\xe4\xb8\xad\xe5\x9b\xbd'
print('中国'.encode(encoding = 'gbk'))    # 输出结果:b'\xd6\xd0\xb9\xfa'

5、python对于字符集的处理

在这里插入图片描述

6、字符串编码的作用

  • python统一了编码,这样python在内部处理的时候不会因编码的不同而出现不能正常执行的问题。
  • python会自动根据系统环境选择编码,但是经常在文件传输的过程中,会遇到各种不同的编码,这个时候就需要我们去处理编码问题。

二、深浅复制

1、深浅复制

# 深浅复制
# 定义如下列表
l1 = [1, 2, 3]
l2 = ['a', l1]

# 1.浅复制
import copy
l3 = l2.copy()
print(l3)
l2.append(6)
print(l2) 
print(l3)

# 2.深复制
import copy
l4 = copy.deepcopy(l2)
print(l4)
l2.append('w')
print(l2)
print(l4)

注意:

1、字符串(数字):在内存中是一次性创建的,不能直接修改,如需修改,需要重新创建。
2、列表等可修改的数据类型:在内存总创建时是以链表的形式创建的
3、字符串、数字:赋值、深浅拷贝都没有意义,因为其永远指向同一个内存地址
4、列表、元组、字典:

2、赋值

在这里插入图片描述

3、浅拷贝

在这里插入图片描述

4、深拷贝

在这里插入图片描述

# 赋值:只是创建一个变量,该变量指向原来的内存地址 
n1 = {'k1': 'fei', 'k2': 123, 'k3': ['fly', 18]} 
# 赋值 
n2 = n1 n1['k1'] = '米多奇' 
print(n1) print(n2)  
n1['k3'][0] = '淘气包' 
print(n1) 
print(n2)  

# 1.浅复制:在内存中只额外的创建第一层数据 
n1 = {'k1': 'fei', 'k2': 123, 'k3': ['fly', 18]} 
import copy 
n3 = copy.copy(n1) 
n1['k1'] = '米多奇' 
print(n1) 
print(n3)  
n1['k3'][0] = '淘气包' 
print(n1) 
print(n3) 
 
# 2.深拷贝: 
import copy 
n1 = {'k1': 'fei', 'k2': 123, 'k3': ['fly', 18]} 
n4 = copy.deepcopy(n1) 
n1['k1'] = '米多奇' 
print(n1) print(n4)  
n1['k3'][0] = '淘气包' 
print(n1) 
print(n4) 

三、bytes和bytearry

1、bytes二进制序列类型

  • 指定长度的零填充字节对象
print(bytes(3))    # 结果为:b'\x00\x00\x00' 
  • 二进制字符对象
bytes(b'abc') 

2、bytearray二进制数组

  • 指定长度的零填充字节对象
bytearray(3) 
  • 二进制字符串对象
bytearray(b'abc') 

注:二进制序列类型的用法比较少见,是python中少用的一种序列类型,对于二进制序列类型,基本了解即可。

print(type('fff'))
print(type(b'fff'))
# bytes是byte的序列,字符串是字符的序列
# 1.str-->bytes
s1 = '中'
b1 = s1.encode('utf-8')
print(b1)

# 2.bytes-->str
s2 = b1.decode('utf-8')
print(s2)

# 3.拓展
# 3.1str-->bytes
s = '淘气包'
b1 = bytes(s,encoding = 'utf-8')
b2 = bytes(s,encoding = 'gbk')
print(b1)

# 3.2bytes-->str.
s1 = str(b1,encoding = 'utf-8')
s2 = str(b2,encoding = 'gbk')
print(s1)
print(s2)

# 3.3bytearray
s1 = '你好,朦胧'
b1 = bytearray(s1,encoding = 'utf-8')
print(b1)
print(type(b1))    # <class 'bytearray'>

print(b1.decode('utf-8'))

b1[:6] = bytearray('美丽', encoding = 'utf-8')
print(b1)
print(b1.decode('utf-8'))	

# 4.编码
s = '中'    # 当程序执行时,字符会以Unicode形式保存到内存空间中
s1 = s.encode('utf-8')
s2 = s.encode('gbk')

print(s)
print(s1)
print(s2)

print(type(s))  # <class 'str'>
print(type(s1))    # <class 'bytes'>
print(type(s2))    # <class 'bytes'>

# 5.巩固
a = '你好潭州'
# 5.1Unicode-->gbk
unicode_gbk = a.encode('gbk')
print(unicode_gbk)

# 5.2Unicode-->utf-8
unicode_utf8 = a.encode('utf-8')
print(unicode_utf8)

# 5.3gbk-->utf-8
gbk_utf8 = unicode_gbk.decode('gbk').encode('utf-8')
print(gbk_utf8)

# 6.总结
"""
1、各个编码的相互转换都要先转换为Unicode,通过Unicode再转其他编码
2、gbk不只这一个
"""
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值