【摘要】 常见面试题https://www.zhangjunbk.com/article/23397 静态方法https://www.cnblogs.com/Meanwey/p/9788713.html
1、copy 和 deepcopy 的区别是什么?
python中的对象之间的赋值是按引用传送的。 (1)copy()浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。
(…
常见面试题https://www.zhangjunbk.com/article/23397
静态方法https://www.cnblogs.com/Meanwey/p/9788713.html
1、copy 和 deepcopy 的区别是什么?
python中的对象之间的赋值是按引用传送的。
(1)copy()浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。
(2)deepcopy()深拷贝,拷贝父对象及其子对象。
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
import copy
origin=[1,2,[3,4]]
cop1=origin #引用
cop2=copy.copy(origin)#浅拷贝
cop3=copy.deepcopy(origin)#深拷贝
origin[2][0]="hey!"
origin[0]="hey!"
print("原来的值:",origin)
print("引用值:",cop1)
print("浅拷贝:",cop2)
print("深拷贝:",cop3)
print("---------------")
print("初始对象地址",id(origin[0]))
print("引用的对象地址",id(cop1[0]))
print("浅拷贝对象地址",id(cop2[0]))
print("深拷贝对象地址",id(cop3[0]))
print("---------------")
print("初始对象地址",id(origin[2][0]))
print("引用的子对象地址",id(cop1[2][0]))
print("浅拷贝子对象地址",id(cop2[2][0]))
print("深拷贝子对象地址",id(cop3[2][0]))
结果为如下:
原来的值: ['hey!', 2, ['hey!', 4]]
引用值: ['hey!', 2, ['hey!', 4]]
浅拷贝: [1, 2, ['hey!', 4]]
深拷贝: [1, 2, [3, 4]]
---------------
初始对象地址 1497843333168
引用的对象地址 1497843333168
浅拷贝对象地址 1497801451824
深拷贝对象地址 1497801451824
---------------
初始对象地址 1497843333168
引用的子对象地址 1497843333168
浅拷贝子对象地址 1497843333168
深拷贝子对象地址 1497801451888
py没有赋值,只有引用。py没有变量,平时说的变量只是标签,即引用。
不可变对象包括int,float,long,str,tuple等
对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。
2、代码中经常遇到的*args, **kwargs 含义及用法。
args表示任意位置参数,* kwargs表示任意个关键字参数
用法:def 函数名(位置参数,args,默认参数,**kwargs),记得arg在kwargs之前
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
def Func(a,b,*args,**kwargs): print (a) print (b) print (args) print (kwargs)
Func(0,1,2,3,index1=11,index2=22)
输出的结果为:
0
1
(2, 3)
{'index1': 11, 'index2': 22}
注意(2,3)是因为不定的参数形式把剩下没有关键字的参数形成为一个tuple
,另外后面2个是赋值关系,会变为字典。
3、Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?
单下划线:
(1)变量为保护变量(只有类对象和子类对象可以访问这些变量)
(2)函数为不能直接访问的类属性,要通过类提供的接口来访问
双下划线:
(1)变量为私有成员(只有类对象自己可以访问,子类对象不能访问该成员)
(2)py里的特殊方法专用的标志符,如__ init()__表示类的构造函数
4、w、a+、wb 文件写入模式的区别
模式 | 作用 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
w | 只写 | 创建 | 是 |
a+ | 可读可写 | 创建 | 否,追加写 |
wb | 只写,以二进制写方式打开 | 创建 | 是 |
其他几个 | |||
r+ | 可读可写 | 报错 | 是 |
w+ | 可读可写 | 创建 | 是 |
a | 只能写 | 创建 | 否,追加写 |