字符串格式化+字符串编码+深浅拷贝

一、字符串格式化的两种方法

1、字符串的格式化:%d %f %s

需要指定数据类型,且需要一一对应

s = "vae"
d = 32
print("我叫%s,年龄%d" %(s, d))        #我叫vae,年龄32
2、format是python特有的,不需要指定数据类型,不需要一一对应
s = "vae"
d = 32
print("我叫{},年龄{}".format(s,d))    #我叫vae,年龄32
print("我叫{0},年龄{1},真名{0}".format(s,d))    #我叫vae,年龄32,真名vae

L = ["许嵩", 32, "vae"]
print("我叫{0},年龄{1},真名{0}".format(*L))   #我叫许嵩,年龄32,真名许嵩

二、字符串编码(encode、decode)

python3里面字符编码实际类型:
a.内存中字符运行的时候编码是unicode,用空间换时间
b.硬盘存储中或者网络传输过程中用utf-8,追求空间

1字节==8位
utf-8:英文:8;中文:24;
unicode:所有的都是16位

encode编码:unicode转换为指定编码
decode解码:将原编码转换成unicode

s = "中"    # 程序执行时,"中"会议unicode形式存在在内存中
# encode编码
s1 = s.encode("utf-8")  #b'\xe4\xb8\xad'
print(s1)
s2 = s.encode("gbk")   #b'\xd6\xd0'
print(s2)

# decode解码
print(s1.decode("utf-8"))  #中
print(s2.decode("gbk"))    #中

#gbk-->utf-8   通过unicode来转换
print(s2.decode("gbk").encode("utf-8"))   #b'\xe4\xb8\xad'

三、深浅拷贝

1、通过id()来查看内存地址
s = "嵩"
n = 5
print(id(s))   #2966737504576
print(id(n))   #140713250513872
2、赋值

注: 字符串、数字:赋值还有深浅拷贝无意义,因为其永远指向同一个内存地址

n1 = {"k1":"v1", "k2":123, "k3":["hh", 18] }
n2 = n1

print(id(n1))   #2568221657344
print(id(n2))   #2568221657344
3、浅拷贝:只在内存中额外创建了第一层数据
import copy
n1 = {"k1":"v1", "k2":123, "k3":["hh", 18] }
n3 = copy.copy(n1)    #浅拷贝,只在内存中额外创建了第一层数据
print(id(n1))         #1907149736192
print(id(n3))         #1907149736264  内存地址变化了

print(id(n1["k3"]))   #1907152948360
print(id(n3["k3"]))   #1907152948360  内存地址没有改变
4、深拷贝:只有最底层的内存地址没有改变
import copy
n1 = {"k1":"v1", "k2":123, "k3":["hh", 18] }
n4 = copy.deepcopy(n1)   #浅拷贝,只在内存中额外创建了第一层数据
print(id(n1))         #2603325884672
print(id(n4))         #2603328856856  内存地址变化了

print(id(n1["k3"]))   #2603329101384
print(id(n4["k3"]))   #2603329101384  内存地址改变了

print(id(n1["k3"][0]))  #3055213298104
print(id(n4["k3"][0]))  #3055213298104  内存地址没有改变
4、bytes 和 bytearray
  • bytes
print(type("vae"))    #<class 'str'>
print(type(b"vae"))   #<class 'bytes'>

bytes和byte的区别,字符串是字符的序列

  • str 转换为 bytes
s = "中"  #str
s1 = s.encode("utf-8")    #编码方式变成了utf-8  str通过encode转换为bytes
print(s1)         #b'\xe4\xb8\xad'
  • bytes通过decode转换为str
s2 = s1.decode("utf-8")
# decode中传入其原来的编码方式:utf-8;
# 系统自动将原来的编码方式utf-8解码为unicode编码方式
print(s2)     #中
  • bytearray:可变
S1 = "你好,世界"
print(S1.encode("utf-8"))   #bytes
B1 = bytearray(S1.encode("utf-8"))   #bytearray
print(B1)
print(type(B1))    #<class 'bytearray'>
# 分解步骤
S = "哈哈"
S1 = "你好,世界"
B1 = bytearray(S1.encode("utf-8"))  
B2 = bytearray(S.encode("utf-8"))
print(B2)
B1[:6] = B2     #将 你好 替换成 哈哈

print(B1.decode("utf-8"))   #哈哈,世界
S1 = "你好,世界"
B1 = bytearray(S1.encode("utf-8"))
B1[:6] = bytearray("美丽", encoding="utf-8")
print(B1.decode("utf-8"))   #哈哈,世界
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值