这里的题有些是简单的话述,所以有可能需要你自己整理,自己整理出来的会加深你的记忆,有些我会附上文章,有些就简单而过,直接上干货了,希望对您有帮助。
1.深拷贝和浅拷贝之间的区别是什么?
深拷贝可理解为递归性质的拷贝,其开辟新的内存空间地址,在修改新的拷贝内容不会影响到旧的内容,其完全拷贝原内容的所以。
import copy
b=copy.deepcopy(a)
而浅拷贝则是将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象。我们使用函数copy()执行浅拷贝
b=copy.copy(a)
2.列表和元组之间的区别是?
二者的主要区别是列表是可变的,而元组是不可变的
不同点一:不可变 VS 可变
两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。
不同点二:同构 VS 异构
tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。
person = (“zhangsan”, 20, 180, 80) 比如记录坐标上的某个点
point = (x, y) 而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型
[“zhangsan”, “Lisi”, “wangwu”] 再比如 list 存放的多条用户记录
[(“zhangsan”, 20, 180, 80), (“wangwu”, 20, 180, 80)] 数据库操作中查询出来的记录就是由元组构成的列表结构。
因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用。
tuple在性能上也要快于list,就迭代来说,同样大小的数据,tuple占用内存更少
异构:多个不同类型的事物或物体来参与完成密谋一件事,具有数据完整性,安全性。
同构:多个相同类型的事物或物体来参与完成某一件事
简单插入异步与同步
异步:已经做好(完)一件事,去做下一件事,中间不需要等待反馈
同步:已经做好(完)一件事,要等待反馈之后继续走一下步构:可由同种或不同种的事物构成
步:步调,保持一样或不同的步调
3.Python2和Python3的区别
觉得这个有些鸡肋,版本迭代肯定会带来区别,但必须要知道,问不问就看面试官的了
print语句被python3废弃,只能使用print函数
Python3中字符串是Unicode (utf-8)编码,支持中文做标识符。
python2中是ASCII编码,需要更改字符集才能正常支持中文,所以在.py文件中会看到
#-- coding: UTF-8 --
# -*- encoding: utf-8 -*-
异常处理 Python2中try:…except Exception, e:…,
在Python3中改为了try:…except Exception as e:…
Python3中不再使用xrange方法,只有range方法。
(这里可以说说他俩的区别。一个是range()函数。另一个就是xrange的生成器)
range在Python2中返回列表,而在Python3中返回range可迭代对象。
在Python2中有两个不等运算符!=和<>,在Python3中去掉了<>,只有!=符号表示不等
在Python2中双反引号可以替代repr函数,在Python3中去掉了双反引号的表是方法,只能用repr方法。
StringIO模块现在被合并到新的io模组内。new, md5, gopherlib等模块被删除。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。
在Python2中long是比int取值范围更大的整数,Python3中取消了long类型,int的取值范围扩大到之前的long类型范围。
列表推导 不再支持[n for n in a,b]语法,改为[n for n in (a,b)]或[n for n in [a,b]]
python 2 中通过input输入的类型是int,只有通过raw_input()输入的类型才是str。
python 3中通过input输入的类型都是str,去掉了row_input()方法。
4.解释一下Python中的三元运算
[on true] if [expression] else [on false]
如果表达式为True,就执行[on true]中的语句。否则,就执行[on false]中的语句
a,b=2,3
min=a if a<b else b
min
判定条件/为真的结果/为假的结果
为真时的结果/判定条件/为假时的结果
先输出结果,在判定条件
5.在Python中如何实现多线程?
一个线程就是一个轻量级进程,多线程能让我们一次执行多个线程。我们都知道,Python是多线程语言,其内置有多线程工具包。
Python中的GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,这会让我们产生并行运行的错觉。但实际上,只是线程在CPU上轮流运行。当然,所有的传递会增加程序执行的内存压力。
解决多线程之间数据的完整性和状态同步的锁机制
含有GIL的解释器有 CPython、Pypy、Psyco
没有GIL的解释器有JPython、IronPython
单线程锁,确保不会恶意争抢资源,造成死锁
Look,一个一个线程执行
线程,进程的关系
俩个功能在同一个进程中执行任务
子线程,主线程,由于没有守护线程,所以,当主线程结束后,子线程也会跟着结束
join() 等待子线程执行结束,再执行主线程。
6.解释一下Python中的继承
当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类/超类。它会继承/获取所有类成员(属性和方法)。
继承能让我们重新使用代码,也能更容易的创建和维护应用。Python支持如下种类的继承:
单继承:一个类继承自单个基类
多继承:一个类继承自多个基类
多级继承:一个类继承自单个基类,后者则继承自另一个基类
分层继承:多个类继承自单个基类
混合继承:两种或多种类型继承的混合
继承,是Python类的重要特性之一,现在Python类的特征应该是四大特性:封装、继承、多态、抽象(因为Class类本身就是抽象的)。
父与子的关系,子类会继承父类的所有公有属性及方法。(公有、私有)。