python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,
对象将被销毁,除了解释器默认创建的对象外。(默认对象的引用计数永远不会变成0)

所有的计数引用+1的情况:

一.对象被创建:
1.a = 23
  这里23这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池,-5~256之间的这些对象
会被自动创建加载到内存中等待调用;a = 23是为23这个整数对象增加了一个引用。
执行代码:

>>> import sys
>>> a = 23
>>> sys.getrefcount(a)

结果:15

23这个整数对象目前有15个引用。

2.MyName()

class MyName(object):
pass

以上,如果对象被创建后没有引用操作,此时的引用计数是0,MyName()本身不是一个引用。

print(sys.getrefcount(MyName()))

结果:1

说明:之所以结果为1,是因为sys.getrefcount(MyName())函数也算一个引用。

二.对象被引用;

a = 23345455
b = a
c = b
print(sys.getrefcount(b))
print(sys.getrefcount(c))

结果:4,4

说明:每一次赋值都会增加数据操作的引用次数,要记住引用的是变量a,b,c等指向的数据23345455,而不是变量本身。

三.对象被作为参数,传入到一个函数中;

# 增加了一个引用
a = 23345455
# 增加了一个引用
b = a
# 增加了一个引用
c = b
# 增加了一个引用
print(sys.getrefcount(b)) # 执行完毕后引用销毁,减少一个引用
# 增加了一个引用
print(sys.getrefcount(c))

说明:以上代码,赋值操作为数据增加了3个引用,sys.getrefcount(b)也增加了一个引用;

为什么sys.getrefcount(c)的结果还是4呢?这是因为当函数执行后,作为参数的引用会自动销毁,所以print(sys.getrefcount(b))在执行完毕后引用就删除了

四.对象作为一个元素,存储在容器中;

# 增加了一个引用
a = 23345455
# 增加了一个引用
b = a
list = [a, b] # 增加了2个引用
print(sys.getrefcount(b)

结果:5

另外还有所有的引用计数减1的情况:python的计数引用分析(二)

python的计数引用分析(一)的更多相关文章

  1. Python 对象的引用计数和拷贝

    Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...

  2. Python程序的性能分析指南(转)

    原文地址 :http://blog.jobbole.com/47619/ 虽然不是所有的Python程序都需要严格的性能分析,不过知道如何利用Python生态圈里的工具来分析性能,也是不错的. 分析一 ...

  3. python中的引用

    作为一个python初学者,今天被一个python列表和词典引用的问题折磨了很久,但其实了解了缘由也很简单,记录在此备忘. 首先背书python中的引用对象问题: 1. python不允许程序员选择采 ...

  4. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  5. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  6. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  7. Python中的引用的使用注意

    关于Python中的引用的一些使用注意 在python中,在创建一个对象并给它赋予一个变量时,这个赋予的变量仅仅是一个引用它所代表的对象.也就是说新创建的对象只是指向计算机中储存那个对象的内存. 比如 ...

  8. 《构建之法》教学笔记——Python中的效能分析与几个问题

    <构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...

  9. python 子包引用父包和其他子包

    python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...

随机推荐

  1. 在 Linux 命令行脚本中执行 sudo 时自动输入密码

    使用 expect 实现自动登录的脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set ...

  2. 用Node.JS+MongoDB搭建个人博客(app.js接口文件)(二)

    app.js的GitHub地址:用力戳我然后点个star 说个题外话,THINKPHP是通过一个index.php来引入文件,所以被称为接口文件. 而NodeJS也有这样的接口文件,通常也会放在根目录 ...

  3. 笔记evernote

    8542-1090-0308-5951 2786-2836-1103-4104 6835-5846-6090-5388 5443-4068-2394-0845

  4. (转)Maven使用

    MAVEN3--(一)关于MAVEN 博客分类: MAVEN3   1.简介 MAVEN是Apache开源组织中的一个跨平台的项目管理工具. 主要功能有项目构建.依赖管理以及项目信息管理. 2.项目构 ...

  5. iOS源码博文集锦2

    iOS精选源码 快速集成观看直播和开播   一款类携程商旅的城市选择界面   一个类似于QQ电话的动画效果   高德地图定位,导航,轨迹,GPS纠偏   真实逻辑滚动数字DPScrollNumberL ...

  6. 53. leetcode557. Reverse Words in a String III

    557. Reverse Words in a String III Given a string, you need to reverse the order of characters in ea ...

  7. VMware NAT端口映射 外网可以访问内网虚拟机

    我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...

  8. js 重载(overload)

    1.js中不支持重载的语法.(因为js不允许多个同名函数存在) 解决:使用arguments类数组对象接收调用时所有传入的参数值. 2. arguments可以使用length属性,通过下标访问,不能 ...

  9. NYOJ--541--最强DE 战斗力(递推)

    最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发 ...

  10. node中使用es6/7/8 --- 支持性与性能

    前言 这几年react.vue的快速发展,越来越多的前端开始讲es6的代码运用在项目中,因为我们可以通过babel进行转译为低版本的js以便于运行在所有浏览器中,import.export.let.箭 ...