Python 基础知识点的个人理解(一)
1.Python可变类型和不可变类型
Python数据类型可以分类两大类,可变类型和不可变类型,可变类型包括(列表,字典),不可变类型是(数值型,字符型,元组)
不可变类型:比如数值型,如果指向一个变量的数值被更改的话,那么这个变量的地址也会变化,这是因为这个变量重新指向了一个新的对象,并不是在原来的数值上修改得来的。
可变类型:比如列表,如果一个变量指向该列表,此列表的中的元素发生变化的时候,此变量指向的地址也就是改变列表的地址是不会发生变化的,也就是说更改是发生在原有的列表对象上的。
2.深拷贝和浅拷贝
深拷贝: 实现:copy模块下的deepcopy()方法
包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
浅拷贝:实现:copy模块下的copy()方法
仅仅对对象的顶层做了拷贝,没有拷贝子元素,所以原始数据发生变化,我们拷贝出来的对象也会发生变化
3.__new__()和__init__()方法的区别
首先他们的参数有不同,__new__第一个参数时cls,__init__()的第一个参数时self,
__new__()方法是类静态方法,返回的是类的实例,决定着__init__()方法是否被调用(返回了实例就调用__init__(),没有返回就不调用)
__init__()方法是实例方法,是对当前对象的初始化
4.编码和解码问题
编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示00110101,还是要显示'a',但计算机怎么知道00110101是'a'呢,这就需要解码,当选择用ascii解码时,当计算机读到 00110101时就到对应的ascii表里一查发现是'a',就显示为'a'
Python3 把系统默认编码设置为 UTF-8,文本字符和二进制数据区分得更清晰,分别用 str 和 bytes 表示。文本字符全部用 str 类型表示,str 能表示 Unicode 字符集中所有字符,而二进制字节数据用一种全新的数据类型,用 bytes 来表示。
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
5.列表推导式和生成器
对元素进行操作 生产元素
multiples = [squared(i) for i in range(30) if i % 3 is 0]
生成器性能比较高一些