Python 开发工程师面试试题(未完待续......)

python语法以及其他基础部分

1.可变与不可变类型;

不可变类型(数字、字符串、元组、不可变集合)不可变类型不能被修改。
可变类型(列表、字典、可变集合)

2.浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现;

基本类型 :
基本类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们是通过按值来访问的。
引用类型 :
引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。
栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值的大小不固定,
因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。
这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,
我们把它叫做按引用访问。

浅拷贝只复制指向某个对象的引用地址,而不复制对象本身,新旧对象还是共享同一块内存。
但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
import copy as cp
L=[1,[2,3]]
L1=cp.copy(L) #浅拷贝: 只是引用,并不会开辟新的内存空间,
                                             L1与L指向同一片内存空间。L改变,L1也会锁着改变。
L2=cp.deepcopy(L) #深拷贝:会为数据重新开辟一片内存空间,L的变化不会影响L2。

3.new() 与 init()的区别;

   _new_作用于_init_之前。前者可以决定是否调用后者,或者说可以决定调用哪个类的_init_方法。
    首先要知道在面向对象编程中,实例化基本遵循创建实例对象、初始化实例对象、最后返回实例对象这么一个过程。
    Python 中的 _new_ 方法负责创建一个实例对象,_init_ 方法负责将该实例对象进行初始化;

4.你知道几种设计模式;

 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点,例如框架中的数据库连接
 装饰器模式:不修改元类代码和继承的情况下动态扩展类的功能,例如框架中的每个controller文件会提供before和after方法。
 迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类
 命令模式: 将”请求”封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作.

5.编码和解码你了解过么;

数据通过编码decode转换成Unicode编码,编码的同时会将数据变成byte类型&#
  • 7
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值