1.列表list常用的方法:
lst = [1,2,3] # append(new_item)方法相当于在列表末尾追加一个元素,相当于 lst[len: ] = new_item lst.append(4) print(lst) # extend(iterable) 方法,将iterable中的每个元素逐个添加到列表中, # 相当于 lst[len: len + len(iterable)] = iterable lst.extend({7,8,9}) print(lst)
2.列表切片Slice:
#lst[start, end, scale] # start 和 end 表示列表索引范围区间,左开右闭 # scale表示间隔步长,不管scale正负,切片取值依次为:start,start+scale, ... slice1 = lst[1, 5, 2] print(slice1) # 切片索引值缺省 # start 默认0, end默认len,scale默认1 slice2 = lst[::] #等价于 slice2 = lst[0:len(list):1]
list的切片是深拷贝,会生成一个副本,不会影响原列表。
3. 深拷贝与浅拷贝
Python解释器为了节省内存空间,如果多个变量为不可变对象且变量的值相同,则这多个变量会指向同一个内存空间,这个内存空间中存储了变量的值。
lst = [1,2, ['a', 'b', 'c']] #浅拷贝列表 lst1 = lst.copy() lst1[0] = 11 lst1[2][0] = 'aaa' print(lst) # 深拷贝列表 import copy lst2 = copy.deepcopy(lst) lst2[2][1] = 'bbb' print(lst)
浅拷贝:对不可变对象进行浅拷贝,不会开辟新内存;对可变对象(如列表)进行浅拷贝:当lst经过浅拷贝生成lst1时,lst和lst1本身指向的地址不同,但是两个列表中元素的引用是相同的,不管列表元素类型是可变类型还是不可变类型。因此,对于浅拷贝的两个列表 lst 和 lst1:当修改lst1中的不可变对象时,lst列表不会改变;当修改lst1中的可变对象lst1[2]的内容时,lst列表也会随之修改。
深拷贝:对不可变对象进行深拷贝,不会开辟新内存;对不可变对象中包含可变元素如元组(1, 2, ['a', 'b']),深拷贝后元组中的可变类型元素也会开辟新内存;对可变对象(如列表)进行深拷贝:当lst经过深拷贝生成lst2时,lst和lst2本身的执行的地址不同,并且对于被拷贝列表lst,其中的可变类型元素以及可变类型元素中的嵌套的可变类型元素等,都会开辟新内存。这样造成的结果就是:对于深拷贝对象lst2,不论lst2的元素怎么改动,都不会影响到原被拷贝对象lst。
标签:lst1,Python,len,列表,切片,lst,可变,拷贝 From: https://www.cnblogs.com/zhangzhenw/p/17946798