深拷贝和浅拷贝的区别是什么?
深拷贝:将对象本身复制给另一个对象,对新的副本做任何的改动,不会影响原对象。
浅拷贝:将对象的引用给另一个对象,对这个对象副本做改动,会影响到原对象。
is和==的区别
is表示对象标识符,检查对象的id是否一样(对象在内存中的地址是否一样),而==表示两个对象是否相等。
从代码上讲,a is b检查的是id(a) == id(b), 而 == 实际调用的是a对象的__eq__()
方法,即a.__eq__(b)
的结果。
可变对象
可变对象 dict,list,不可变对象 str,int,tuple,float。
连接字符串用join还是+
由于字符串是不可变对象,如果要连接N个字符:S1+S2+...+SN,执行一次操作就会在内存申请一块新空间,将上次的操作结果和本次右操作数复制到新的内存空间,重复。因此,在N个字符连接的过程中,会有N-1次中间结果,严重影响执行效率。时间复杂度接近为O(n^2).
当用join()时,会首先计算需要的内存空间,然后一次申请将每个元素都复制到内存中去,所以时间复杂度为O(N)
with语句
一个实现了__enter__和__exit__方法的对象就称之为上下文管理器。
自定义一个上下文管理器:
class ContextManager(object):
def __enter__(self):
print("entering")
def __exit__(self, exception_type, exception_value, traceback):
print("exiting")
if exception_type is None:
print("exit without exception")
else:
print("exit with exception: %s" % exception_value)
return False
百度大牛总结的十条Python面试题 https://blog.csdn.net/lingpy/article/details/80313633
整理的最全 python常见面试题(基本必考)https://blog.csdn.net/changkai456/article/details/80372198
100道python真实面试题(附答案)https://blog.csdn.net/weixin_41666747/article/details/79942847