python基础篇 05-字符串切片 深copy
#切片是list范围取值的一种方式 import string print(string.ascii_lowercase) #所以的小写字母 abcdefghijklmnopqrstuvwxyz print(string.ascii_uppercase) #所以的大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ print(string.digits) # 所有的数字 0123456789 print(string.ascii_letters) # 所有的大小写字母 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ print(string.punctuation) # 所有的特殊字符 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ """ 切片 很重要 """ # 0 1 2 3 4 5 6 7 8 l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'] #切片的时候是顾头不顾尾的 # -9 -8 -7 -6 -5 -4 -3 -2 -1 print(l[2:]) #取到末尾 print(l[2:-1]) #最后一个元素取不到 print(l[:]) #取所有元素 print(l[0:9:2]) #步长 print(l[::-1]) #如果是负数的话,那么取值的时候就从右往左开始取,同时你的开始和结束下标也要写成负数 print(l[-1:-4:-1]) #倒着数,第一个表示从最右边开始的位置,第二个表示 结束的位置 同样 顾头不顾尾 ['i', 'h', 'g'] s='abcdef' print(s[::-1]) #倒着取 相当于字符反转 """ 浅拷贝 深拷贝 非常重要 非常重要 非常重要 """ # 循环删除list中元素,导致下标错乱 l1 = [1,0,4,2,5,4,7,6,9,8] for i in l1: print("====="+str(i)) print(l1) if i % 2 == 0 : l1.remove(i) # 删除第一次出现的元素 print("++++"+str(i)) print(l1) import copy # print(list(range(10))) # 0 1 2 3 4 5 6 l = [0, 1, 2,2, 3, 4, 5] l2 = copy.deepcopy(l) #深拷贝 重新开辟内存空间 生成新的变量 l3 = l.copy() # 半深拷贝,只开辟了一层地址,子内存地址没有新生成,简而言之:拷贝不彻底,只拷贝了一层,没有拷贝子元素的地址,杜绝使用 print(id(l)) # 查看内存地址 print(id(l2)) print(id(l3)) for i in l2: if i % 2 == 0: l.remove(i) print(l) l = [ 1,2,3,[4,5,6] ] l2 = l.copy() # 浅拷贝 杜绝使用 l2 = copy.copy(l) # 浅拷贝 杜绝使用 l2 = l[:] # 浅拷贝 杜绝使用 print(id(l)) print(id(l2)) l[-1].append('abc') print(l) print(l2) #浅拷贝/深拷贝 #如果复制了一个变量,这两个变量其中一个变了之后,不应该影响另外一个的情况下,就要用深拷贝