1.原对象修改字符串
Python中的字符串属于不可变对象,如果修改,会创建新的对象,可想而知,再需要频繁修改字符串时会产生大量的对象,占用较多内存;
为了实现原对象修改字符串,可以使用io.StringIO对象:
import io
str = "hello world"
str1=io.StringIO(str)
print(str1.getvalue())
print(id(str1.getvalue()))
str1.seek(5)
str1.write('#')
print(str1.getvalue())
print(id(str1.getvalue()))
可以看到,字符串已被修改,但引用的对象仍是同一对象。
2.Python中的序列
序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放 多个值的连续的内存空间;
序列中存储的是整数对象的地址,而不是整数对象的值。python 中常用的序列结构有: 字符串、列表、元组、字典、集合。
3.列表
列表中的元素可以各不相同,可以是任意类型,列表大小可变,可随时增加或减少元素。
列表的创建:
#基本语法创建
a = [1,2,3,4,5]
print(a)
#list函数与range合并创建
b = list(range(10))
print(b)
b = list(range(1,11,2))
print(b)
c = "12345"
d = list(c)
print(d)
#推导式创建
e = [x for x in range(20) if x%3==0]
print(e)
列表添加元素:append方法,'+'运算符,extend方法,insert方法,'*'运算符,其中'+'运算符和'*'运算符都会产生新的列表对象
a = [1,2,3]
print(a)
print(id(a))
a.append(4)
print(a)
print(id(a))
a = a + [5,6]
print(a)
print(id(a))
a.extend([7,8])
print(a)
print(id(a))
a.insert(3, 'x')
print(a)
print(id(a))
a = a*3
print(a)
print(id(a))
列表的切片操作:
切片 slice 操作可以让我们快速提取子列表或修改。标准格式为:
[起始偏移量 start:终止偏移量 end[:步长 step]]
注:当步长省略时顺便可以省略第二个冒号
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始
偏移量小于 0 则会当做 0,终止偏移量大于“长度-1”会被当成”长度-1”。
a = [0,1,2,3,4,5,6,7,8,9]
print(a)
print(id(a))
#可以看到切片产生新的对象了
b = a[:]
print(b)
print(id(b))
b = a[1:7:2]
print(b)
print(id(b))
#负数表示倒数,-5表示倒数第5个
b = a[-5::2]
print(b)
print(id(b))
4.元组
Python中的元组属于不可变序列,因此不能增删元素
元组的创建类似于列表,使用""创建,或使用tuple()创建,tuple的输入是一个可迭代的对象;
元组的访问、切片等与列表相同,只不过返回的是元组;
元组的排序中不能使用列表中的list.sorted这样的原地修改对象的方法,只能使用如sorted这样的创建新对象的方法;