关于Python的问题

1.什么是深拷贝、浅拷贝?一个类的进行了实例化为了a后,b对a进行了拷贝,那在b上做的操作会影响到a吗?

浅拷贝,如果容器里面的项是引用,拷贝的就是引用,此引用指向相同的对象。深拷贝,如果容器里面的项是引用,拷贝的是引用所指向的对象、即创建新对象(若此对象是一个容器,里面的项是引用,递归上述操作)

如果是浅拷贝,在b上做的操作会影响到a,深拷贝就不会。

2.字符串的比较中,is或==的区别是什么?

==:比较两个字符串内的value值是否相同。is:比较两个字符串的id值是否相同。

3.list添加元素有哪些方法?insert()和apend()在时间效率上的区别是什么?

有append()、extend()、insert()、"+"方法。list底层是线性表,insert需要把它后面的元素都挪一位,是O(n)操作,append没有挪动其它元素的问题,直接加到尾部,是O(1)操作。

4.如果换用链表的话,insert和append的效率上的区别是什么?

换用链表的话,insert和append操作的时间复杂度都是O(1)。

5.dict如果想要判定是否存在某一个key,如果不存在的话,插入一个,要怎么做?除了用迭代keys的查索引的话,还会用dict本身的什么方法?

setdefault(key, default=None)方法,如果键不存在于字典中,将会添加键并将值设为默认值。

6.Python线程和进程的区别?

进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。一个应用程序至少包括1个进程,而1个进程包括1个或多个线程,线程的尺度更小。每个进程在执行过程中拥有独立的内存单元,而一个进程的多个线程在执行过程中共享内存。cpu耗用过多的时候使用多进程,io操作密集的时候使用多线程。Python的多进程编程主要依靠multiprocessing模块,多线程编程主要依靠threading模块。

7.值传递和引用传递区别是什么?

值传递:适用于实参类型为不可变类型(字符串、数字、元组);引用(地址)传递:适用于实参类型为可变类型(列表,字典)。值传递和引用传递的区别是,函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数进行引用传递后,改变形参的值,实参的值也会一同改变。

8. Python垃圾回收机制有哪些?

(1)引用计数。而当一个对象有新的引用时,它的引用计数就会增加,当引用它的对象被删除,它的引用计数就会减少,当引用计数为0时,该对象生命就结束了。

(2)标记清除。处理循环引用的情况。对象之间通过引用连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边。从根对象(root object)出发,沿着有向边遍历对象,可达的(reachable)对象标记为活动对象,不可达的对象就是要被清除的非活动对象。

(3)分代回收。建立在标记清除技术基础之上的,是一种以空间换时间的操作方式。Python将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表。新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象。

9. Python多线程效率不高吗?

Python由于有全局解释器锁(GIL) 的存在,同一时间只能有一个线程执行,并不能利用多核优势。所以,如果是CPU密集型任务,那多线程并不能带来效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降;如果是IO密集型,多线程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值