Python基础入门_概念
python是一门解释型,强类型,动态型,汇编语言
机器语言
#优点是最底层,执行速度最快
#缺点是最复杂,开发效率最低
汇编语言
#优点是比较底层,执行速度最快
#缺点是复杂,开发效率最低
高级语言
#编译型语言执行速度快,不依赖语言环境运行,跨平台差
#解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行
强弱语言
#强类型语言特点:不同类型不可以计算,必须类型进行转换
#弱类型语言特定:不同类型可以互相计算
动态语言
#静态语言:指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型
#动态语言: 在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型
队列与栈
队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表;
栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。
区别如下:
一、规则不同
1. 队列:先进先出(First In First Out)FIFO
2. 栈:先进后出(First In Last Out )FILO
二、对插入和删除操作的限定不同
1. 队列:只能在表的一端进行插入,并在表的另一端进行删除;
2. 栈:只能在表的一端插入和删除。
三、遍历数据速度不同
1. 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快;
2. 栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性
Python垃圾回收
GC回收机制:主要使用引用计数(reference counting)来跟踪和回收垃圾
1.引用变量:
x=100 #引用计数为1
y=x #引用计数为2
x=200 #引用计数为1
2. 循环引用带来的内存泄漏;在引用计数的基础上,使用“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题;
3. 分代回收(使用“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率;分代回收是建立在标记清除技术基础之上)
小整数池优化机制:常驻内存(整数:-5~256;字母;)
深浅拷贝
说明:
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象
例:
# 浅拷贝
l1 = [1, 2, [1, 2]]
l2 = l1.copy()
print("浅拷贝1:%s" % l1) >>>浅拷贝1:[1, 2, [1, 2]]
print("浅拷贝2:%s" % l2) >>>浅拷贝2:[1, 2, [1, 2]]
print(id(l1[2])) >>>2495907112960
print(id(l2[2])) >>>2495907112960
l1[2].append(4)
print("浅拷贝1:%s" % l1) >>>浅拷贝1:[1, 2, [1, 2, 4]]
print("浅拷贝2:%s" % l2) >>>浅拷贝2:[1, 2, [1, 2, 4]]
print(id(l1[2])) >>>2495907112960
print(id(l2[2])) >>>2495907112960
#深拷贝
l1 = [1, 2, ["a", 2]]
l2 = copy.deepcopy(l1)
print(l1) >>>[1, 2, ['a', 2]]
print(l2) >>>[1, 2, ['a', 2]]
print(id(l1[2])) >>>1936380864640
print(id(l2[2])) >>>1936380781504
l2[2].append(3)
print(l1) >>>[1, 2, ['a', 2]]
print(l2) >>>[1, 2, ['a', 2, 3]]
print(id(l1[2])) >>>1936380864640
print(id(l2[2])) >>>1936380781504