前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 经典面试题 二

Python 经典面试题 二

作者头像
吾非同
发布2020-10-26 11:39:00
3420
发布2020-10-26 11:39:00
举报
文章被收录于专栏:吾非同吾非同
1.简要描述Python的垃圾回收机制(garbage collection)

Python中的垃圾回收是以引用计数为主,标记-清除分代收集为辅。

•引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。•标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。•分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。

2.简述面向对象中new和init区别?
代码语言:javascript
复制
1、__new__至少要有一个参数 cls,代表当前类,此参数在实例化时由Python解释器自动识别。
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以 return 父类(通过 super(当前类名, cls))__new__出来的实例,或者直接是 object 的__new__出来的实例。
3、__init__有一个参数 self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。
4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过 return 语句里面调用的__new__函数的第一个参数是 cls 来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
3.列出 Python 中可变数据类型和不可变数据类型,为什么?

1、可变数据类型:list、dict、set 2、不可变数据类型:int/float、str、tuple 原理:可变数据类型即公用一个内存空间地址,不可变数据类型即每产生一个对象就会产生一个内存地址。

4.python 中交换两个数值
代码语言:javascript
复制
a,b=1,2
a,b=b,a
5.遇到 bug 如何处理

•简单直接、粗暴有效的就是用print()把可能有问题的变量打印出来看看。•凡是用print()来辅助查看的地方,都可以用断言(assert)来替代。•把print()替换为logging是第三种方式,和assert比,logging不会抛出错误,而且可以输出到文件。•启动python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。

6.使用 pop 和 del 删除字典中的"name"字段,dic={"name":"zs","age":18}
代码语言:javascript
复制
dic = {"name": "zs", "age": 18}
dic.pop('name')
del dic['age']
print(dic)
7.列出几种魔法方法并简要介绍用途
代码语言:javascript
复制
__init__:对象初始化方法
__new__:创建对象时候执行的方法,单列模式会用到
__str__:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
__del__:删除对象执行的方法
8.请说明 sort 和 sorted 对列表排序的区别

•sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。•sorted(L)返回一个排序后的L,不改变原始的L,L.sort()是对原始的L进行操作,调用后原始的L会改变,没有返回值;所以a = a.sort()是错的啦!a = sorted(a)才对。•sorted()适用于任何可迭代容器,list.sort()仅支持list(本身就是list的一个方法),sorted使用频率比list.sort()更高些,所以Python中更高级的排序技巧便通过sorted()来演示

9.Python 字典和 json 字符串相互转化方法
代码语言:javascript
复制
    import json
    dic = {"name":"zs"}
    res = json.dumps(dic)
    print(res,type(res))
    ret = json.loads(res)
    print(ret,type(ret))
10、is和==区别?

is:比较两边的内存地址是否相等,是比较两个引用是否指向了同一个对象(引用比较)

==:比较两边的数值是否相等。

代码语言:javascript
复制
 a = [1, 2, 3]
 b = a
 print(a is b)
 print(a == b)

 c = copy.deepcopy(a)
 print(a is c)
 print(a == c)
 -------------
  True
  True
  False
  True
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾非同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.简述面向对象中new和init区别?
  • 3.列出 Python 中可变数据类型和不可变数据类型,为什么?
  • 4.python 中交换两个数值
  • 5.遇到 bug 如何处理
  • 6.使用 pop 和 del 删除字典中的"name"字段,dic={"name":"zs","age":18}
  • 7.列出几种魔法方法并简要介绍用途
  • 8.请说明 sort 和 sorted 对列表排序的区别
  • 9.Python 字典和 json 字符串相互转化方法
  • 10、is和==区别?
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档