python语法以及其他基础部分
1.可变与不可变类型;
不可变类型(数字、字符串、元组、不可变集合)不可变类型不能被修改。
可变类型(列表、字典、可变集合)
2.浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现;
基本类型 :
基本类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们是通过按值来访问的。
引用类型 :
引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。
栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值的大小不固定,
因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。
这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,
我们把它叫做按引用访问。
浅拷贝只复制指向某个对象的引用地址,而不复制对象本身,新旧对象还是共享同一块内存。
但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
import copy as cp
L=[1,[2,3]]
L1=cp.copy(L) #浅拷贝: 只是引用,并不会开辟新的内存空间,
L1与L指向同一片内存空间。L改变,L1也会锁着改变。
L2=cp.deepcopy(L) #深拷贝:会为数据重新开辟一片内存空间,L的变化不会影响L2。
3.new() 与 init()的区别;
_new_作用于_init_之前。前者可以决定是否调用后者,或者说可以决定调用哪个类的_init_方法。
首先要知道在面向对象编程中,实例化基本遵循创建实例对象、初始化实例对象、最后返回实例对象这么一个过程。
Python 中的 _new_ 方法负责创建一个实例对象,_init_ 方法负责将该实例对象进行初始化;
4.你知道几种设计模式;
单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点,例如框架中的数据库连接
装饰器模式:不修改元类代码和继承的情况下动态扩展类的功能,例如框架中的每个controller文件会提供before和after方法。
迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类
命令模式: 将”请求”封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作.
5.编码和解码你了解过么;
数据通过编码decode转换成Unicode编码,编码的同时会将数据变成byte类型&#