python面试题和知识点总结
1.可变数据类型(同址变值)和不可变数据类型(变址变值)
- 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
- 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。
可变数据类型:列表,字典,集合
不可边数据类型:数字,字符串,元组
2.id()函数
返回对象的内存地址
3.is和==的区别
is比较两个对象的内存地址是否相同,==比较两对象的存储的内容是否相同
注意:
a = 2 b = 2 a is b #这个值是True
但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象。
a = None b = None print(a is b) #True
None是用的单例模式
4.=,深拷贝和浅拷贝的区别
1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。
2. 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。
3. 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。
5.函数即对象
python里一切皆对象,python中的函数也可以看成对象,函数可以被当成参数传递和返回。
5.闭包
在一个外函数中定义了一个内函数,内函数里运用了外函数的局部变量,并且外函数的把这个内函数作为参数返回。这样就构成了一个闭包。
6.装饰器
在不修改已完成函数代码的情况下扩展函数功能,写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展。
7.GIL
全局解释器锁是一种机制,解释器通过这种机制(获取全局解释器锁)来限制同一个时间点只允许一个线程执行,即使是多核环境下.这样保证了多线程编程的安全.
8.isinstance()和type()
isinstance()用来判断一个对象是不是一个已知类型,子类可以被看做父类类型。
tyep()放回一个对象的类型,子类和父类不是同一类型。
9.标量存储和容器存储
一个能保存单个字面对象的类型我们称它为原子或标量存储,那些可容纳多个对象的类型,我们称之为容器存储。
10.三元表达式
x if x>y else y
11.互换两个数的值
a,b = b,a

浙公网安备 33010602011771号