#!/usr/bin/python # -*- coding:utf-8 -*- # 切片 """" 切片 L [起始 : 结束 : 方向] L = list(range(100)) r = L[80 : 20: -10] print r # [80, 70, 60, 50, 40, 30] """ import copy """List""" # 例子1 L = ["Michale", "Sarah","Tracy", "Bob", "Jack"] # 取前三个元素 r = L[:3] print r # 取第一到第三个元素 r = L[1:3] print r # 倒数第二个到最后一个 r = L[-2 :] print r # 例子2 L = list(range(100)) print L # 2.1 取前十个 r = L[:10] print r # 2.2 取后十个 r = L[-10 : ] print r # 2.3 取 11- 20 r = L[11:20] print r # 2.4 取前10个,每两个取一个 r = L[:10:2] print r # 2.5 所有数,每五个取一个 r = L[::5] print r # 2.6 复制一个list r = L[:] print r """tuple""" r = (1,2,3,4,5)[:3] print r """字符串""" str = "abcdefg" r = str[-4:5] print r L = list(range(100)) r = L[80 : 20: -10] print r """ 问题: a=[[1,2,3],4,5,6] b=a[:] b[0].pop() 得到: b [[1,2],4,5,6] a [[1,2],4,5,6] """ print "\n 华丽的分割线" a=[[1,2,3],4,5,6] b=a[:] b[0].pop() print id(a) print id(b) print id(a[0]) print id(b[0]) print id(a[1]) print id(b[1]) """ 打印结果: 4554209760 4554211128 4554209832 4554209832 140234437186848 140234437186848 切片之后, a & b的地址不一样,两个对象指向同一块内存地址 对于a[0] & b[0] 是可变对象,参考【使用dict 和set】一章,a[0] & b[0]指向的是同一块内存地址,所以更改了b[0].pop() 是会影响到a[0]的 4,5,6 是常量,在内存中存储在"常量区",内存地址一样 """ print "\n 浅拷贝" c = copy.copy(a) print id(a) print id(c) print id(a[0]) print id(c[0]) print id(a[1]) print id(c[1]) """ 导入copy模块进行浅拷贝 结果 4554209760 4554211272 4554209832 4554209832 140234437186848 140234437186848 其实结论和切片一直,也就是说 切片其实就是对对象的 浅拷贝,不知道对不对 """ print "\n 深拷贝" d = copy.deepcopy(a) print id(a) print id(d) print id(a[0]) print id(d[0]) print id(a[1]) print id(d[1]) """ 深拷贝 4554209760 4554317904 4554209832 4554317976 140234437186848 140234437186848 里面的可变对象 a[0] & b[0] 都进行了拷贝,指向不同的地址 但是 4,5,6 是常量,在常量区,地址都一样 """ print "\n 内存存储空间" e = "abc" eList = [[1, 2, 3], e] fList = eList[:] print eList print fList print id(eList) print id(fList) print id(eList[0]) print id(fList[0]) print id(eList[1]) print id(fList[1]) """ 内存存储空间 [[1, 2, 3], 'abc'] [[1, 2, 3], 'bcd'] 4554318120 4554318192 4554318264 4554318264 4553365704 4554426728 """
请问下最后这段代码中: elist 和 flist中的元素应该是相同的吧? 为什么你这个上面是[[1,2,3],'abc']和[[1,2,3],'bcd']呢?
Sign in to make a reply
_______祥子