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

 

 

 

posted @ 2019-07-01 16:40  AI_Engineer  阅读(139)  评论(0)    收藏  举报