本文共 2998 字,大约阅读时间需要 9 分钟。
类和实例之间的理解
人类,哺乳类 实例是某一类中的真实个体
时间复杂度
O(1) O(n) O(n**2) 随着处理的数据逐渐增加,程序返回结果的时间变化的描述. O(1)表示无论程序处理的数据如何增加,返回结果的时间是常数 O(n)随着处理数据的数量n的增加,返回结果的时间线性增长n O(n)随着处理数据的数量n的增加,返回结果的时间指数级增长n**2
list,链表,queue,stack
list: 有序的、紧密的可变序列 链表: 手拉手的有序序列 queue: 有序队列,常用于先进先出模型 stack: 常用于后进先出的有序队列
列表O(1)操作:
append() extend() pop() insert() 插入方法插入时的时间是O(1),但导致其他元素的后移,所使用的时间更久.慎用.
列表O(n)操作:
count() index() remove() pop(index)
列表复制:
==,内容,值比较 is,内存地址比较,是否是同一对象 = , 赋值,此赋值仅复制了对象的引用 list.copy, 列表的第一次简单元素深复制,嵌套结构仅复制引用 copy.deepcopy, 深复制,递归复制所有对象本身 浅复制 l1=l2 l1=l2.copy() 深复制 l1=copy.deepcopy() 示例; >>> l1=[1,2,3,[1]] >>> l1 [1, 2, 3, [1]] >>> l2=l1 # 直接复制 >>> l3=l1.copy() # 使用列表方法复制 >>> l1 [1, 2, 3, [1]] >>> l2 [1, 2, 3, [1]] >>> l3 [1, 2, 3, [1]] >>> l1[0]=100 # 修改第一层列表中元素 >>> l1 [100, 2, 3, [1]] >>> l2 [100, 2, 3, [1]] >>> l3 # copy()复制的元素不变 [1, 2, 3, [1]] >>> l1[-1][0]=100 # 修改嵌套在里面的列表中元素 >>> l1 [100, 2, 3, [100]] >>> l2 [100, 2, 3, [100]] >>> l3 # l2,l3都被修改 [1, 2, 3, [100]]
==和is示例;
>>> l1 [1, 2, 3] >>> l2=l1 >>> l3=l1.copy() >>> id(l1) 140604879543624 >>> id(l2) 140604879543624 >>> id(l3) 140604745250184 >>> l1 == l2 True >>> l1 == l3 True >>> l1 is l2 True >>> l1 is l3 False
append()和extend()区别
L.append(object) -> None L.extend(iterable) -> None append() 将对象附加至列表尾部 extend() 将可迭代对象的元素附加至列表尾部 >>> l1 [1, 2, 3] >>> l2 ['a', 'b', 'c'] >>> l1.append(l2) # 将l2列表作为一个对象附加至列表l1 >>> l1 [1, 2, 3, ['a', 'b', 'c']] >>> l1.extend(l2) # 将l2中的元素逐个附加至列表l2 >>> l1 [1, 2, 3, ['a', 'b', 'c'], 'a', 'b', 'c']
[[0],[0],[0]] 和 *n 区别
>>> l1 = [[0],[0],[0]] # 创建三个不同的对象 >>> l1 [[0], [0], [0]] >>> id(l1[0][0]) # 不同的内存地址 8948000 >>> id(l1[1][0]) 8947968 >>> id(l2[0][0]) # 同一内存地址,也就是同一对象 8948000 >>> id(l2[1][0]) 8948000 >>> l2 = `0`*3 # 创建三个同一对象 >>> l2 [[0], [0], [0]] >>> l1[0][0]=1 >>> l1 [[1], [0], [0]] >>> l2[0][0]=1 >>> l2 [[1], [1], [1]]