首页 > 编程语言 > 详细

Python

时间:2020-08-21 15:16:49      阅读:68      评论:0      收藏:0      [点我收藏+]

python中的pass作用:在python中有时候能看到定义一个def函数,函数内容部分填写为pass。这里的pass主要作用就是占据位置,让代码整体完整。如果定义一个函数里面为空,那么就会报错,当你还没想清楚函数内部内容,就可以用pass来进行填坑。

引用所指判断    引用计数器机制:利用引用计数器方法,在检测到对象引用个数为0时,对普通的对象进行释放内存的机制

  通过is进行引用所指判断,is是用来判断两个引用所指的对象是否相同。查看对象的引用计数:导入sys模块,sys.getrefcount()

整数

In [46]: a=1
In [47]: b=1
In [48]: print(a is b)
True

短字符串

In [49]: c="good"
In [50]: d="good"
In [51]: print(c is d)
True

长字符串

In [52]: e="very good"
In [53]: f="very good"
In [54]: print(e is f)
False

列表

In [55]: g=[]
In [56]: h=[]
In [57]: print(g is h)
False

由运行结果可知:

  1、Python缓存了整数和短字符串,因此每个对象在内存中只存有一份,引用所指对象就是相同的,即使使用赋值语句,也只是创造新的引用,而不是对象本身;

  2、Python没有缓存长字符串、列表及其他对象,可以由多个相同的对象,可以使用赋值语句创建出新的对象。

id方法:

In [35]: id(var2)
Out[35]: 139697863383968

PS:id()是python的内置函数,用于返回对象的身份,即对象的内存地址。

增加引用个数的情况:1.对象被创建p = Person(),增加1;    2.对象被引用p1 = p,增加1;           3.对象被当作参数传入函数func(object),增加2,原因是函数中有两个属性在引用该对象;           4.对象存储到容器对象中l = [p],增加1

减少引用个数的情况:1.对象的别名被销毁del p,减少1;              2.对象的别名被赋予其他对象,减少1;                  3.对象离开自己的作用域,如getrefcount(对象)方法,每次用完后,其对对象的那个引用就会被销毁,减少1;                    4.对象从容器对象中删除,或者容器对象被销毁,减少1

 垃圾回收:

  1、垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;

  2、Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)

  3、当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。

何为分代回收?

  Python将所有的对象分为0,1,2三代;

  所有的新建对象都是0代对象;

  当某一代对象经历过垃圾回收,依然存活,就被归入下一代对象。

In [93]: import gc

In [94]: gc.get_threshold()  #gc模块中查看阈值的方法
Out[94]: (700, 10, 10)

阈值分析:

  700即是垃圾回收启动的阈值;

  每10次0代垃圾回收,会配合1次1代的垃圾回收;而每10次1代的垃圾回收,才会有1次的2代垃圾回收;

当然也是可以手动启动垃圾回收: In [95]: gc.collect() #手动启动垃圾回收   Out[95]: 2

“静态类型”语言要求必须在变量定义时指定其类型,例如C、C++、Java、C#和Go等。

而动态类型语言中尽管也有类型的概念,但变量的类型是动态的。

a = 1
a = "foo"

在这个例子中,Python用相同的名字和str类型定义了第二个变量,同时释放了第一个a的实例占用的内存。

静态类型语言的设计目的并不是折磨人,这样设计是因为CPU就是这样工作的。如果任何操作最终都要转化成简单的二进制操作,那就需要将对象和类型都转换成低级数据结构。

python中常见的几种错误:
技术分享图片

数据结构:

列表的一般用法:

list1 = [frui,male,1989,python,[2016,2017],c] #list内元素的数据类型可以不同,也可以是另外一个list
list2 = [‘‘]
print (list1)

#使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:
print (list1[:])
print (list1[0],list1[1])
print (list1[-1],list1[-2])
print (list1[0:3]) #切片,此操作顾头不顾尾
print (list1[:3])
print (list1[-3:]) #切片,从后向前数索引,也只能从左往右切片,同样是顾头不顾尾。(这样会无法取到最后一个元素,思考怎么办?)
print (list1[0:-1:2]) #按步长切片
print (list1[::2]) #按步长切片

list1.append("linux") #在列表末尾追加元素
list1.insert(1,"linux") #直接把元素插入的指定位置
list1[0] = "jay" #(改)直接替换某个位置元素

#delete
list1.pop() #删除list末尾的元素
list1.pop(1) #删除指定位置的元素
del list1[0]
list1.remove("python") #此种方法和前两种的区别是什么?

print (list1)
print (list1.index(1989)) #查找已知元素的索引
print (list1[list1.index(1989)])

print (list1.count(1989)) #打印某元素在列表中的数量
list1.clear() #清除整个列表
list1.reverse() #反转整个列表
list1.sort() #排序 按ASCII码顺序排序,若元素中有list类型,则无法排序,为什么?

list2 = [1,2,3,4]
list1.extend(list2) #列表合并
print (list1)
del list2 #删除整个变量
#列表的深浅copy
#浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化。
#深拷贝是指将原列表完全克隆一份新的。
import copy
list1 = [frui,male,1989,python,[2016,2017],c] 
list2 = list1.copy() #浅copy
list3 = copy.copy(list1) #浅copy,同list1.copy()效果相同
list4 = copy.deepcopy(list1) #深copy,会和list1占用同样大小的内存空间
list1[0] = 自由
list1[4][0] = 2015
print (list1,\n,list2,\n,list3,\n,list4)
#列表的循环:逐个打印列表元素
list1 = [frui,male,1989,python,[2016,2017],c] 
for i in list1:
    print (i)

Python

原文:https://www.cnblogs.com/laurarararararara/p/13540803.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!