在python中字符串是基本数据类型,是一个不可变的字符序列。
字符串的驻留机制
使用三种不同的赋值方式赋值同一个字符串
a = 'python'
b = "python"
c = '''python'''
print(a, id(a))
print(b, id(b))
print(c, id(c))
发现三个变量的内存地址是一样的。
这是由于字符串保留机制仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中。python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新的空间,而是把该字符串的地址赋给新创建的变量。
字符串驻留机制的优缺点
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。
字符串查找
# index( ); find( ): 从左边找起
# rindex( ); rfind( ): 从右边找起
s = 'hello,world'
print(s.index('lo'))
print(s.find('lo'))
print(s.rindex('l'))
print(s.rfind('h'))
注:查找不存在的字符串时,index方法会报错,find方法会返回-1(所以建议用find)
print(s.index('k'))
print(s.find('k')) # 返回-1
print(s.rfind('k')) # 返回-1
字符串大小写转换操作
转换后,会产生一个新的字符串对象(除非符合字符串驻留机制)
s = 'hello,Python'
a = s.upper() # 全部大写
print(s, id(s))
print(a, id(a))
print(s.lower(), id(s.lower())) # 全部小写
print(s.swapcase(), id(s.swapcase())) # 交换大小写
print(