编码与深浅copy
一 编码操作
1 编码 enconde()
英文字符编码为"utf-8"时,一个字符占一个字节。
s1='abcdef' b1=s1.encode('utf-8') print(b1) 结果为:b'abcdef'
汉字编码为"utf-8"时,一个汉字占三个字节。
汉字编码为"gbk"时,一个汉字占两个字节。
s2='中国' b2=s2.encode('utf-8') b3=s2.encode('gbk') print(b2) print(b3)
结果为: b'\xe4\xb8\xad\xe5\x9b\xbd' b'\xd6\xd0\xb9\xfa'
2 解码 deconde()
s4="你好" b4=s4.encode('utf-8') b5=b4.decode('utf-8') print("'你好'编码为'utf-8'后为:",b4) print("解码后为:",b5) b6=s4.encode('gbk') b7=b6.decode('gbk') print("'你好'编码为'gbk'后为:",b6) print("解码后为:",b7)
结果为: '你好'编码为'utf-8'后为: b'\xe4\xbd\xa0\xe5\xa5\xbd' 解码后为: 你好 '你好'编码为'gbk'后为: b'\xc4\xe3\xba\xc3' 解码后为: 你好
二 深浅copy
定义:
在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
1 浅copy
(1)浅copy 第一层各自独立,从第二层开始,共用一个内存地址。
s1=[1,2,3] s2=s1 print(s1,s2) s1.append(666) print(s1) print(s2) print(id(s1)) print(id(s2))
结果为:
[1, 2, 3] [1, 2, 3] [1, 2, 3, 666] [1, 2, 3, 666] 2670563612488 2670563612488
可以看到s1、s2的内存地址是一样的,既就是s2为s1的一个引用而已。
(2)
s3=[1,2,3,[44,55]] s4=s3.copy() s3[-1].append(666) print(s3) print(s4) print(id(s3[-1])) print(id(s4[-1]))
结果为:
[1, 2, 3, [44, 55, 666]] [1, 2, 3, [44, 55, 666]] 1781567379272 1781567379272
2深copy
import copy s5=[1,2,3,[44,55]] s6=copy.deepcopy(s5) s5.append(666) print(s5) print(s6) print(id(s5)) print(id(s6))
结果为:
[1, 2, 3, [44, 55], 666] [1, 2, 3, [44, 55]] 1774773104968 1774773106248
可以看到s5、s6的内存地址是不一样的。
对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。
总结:
(1)深浅拷贝都是对源对象的复制,占用不同的内存空间。
(2)不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的。
(3)可变类型:
=浅拷贝: 值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)