python 基础之引用计数

 引用计数

  - python中所有的数据都是通过类来实现的,对象的管理是通过引用计数实现的
  - 当创建一个对象赋值给一个变量时,引用计数为1,当多一个变量指向该对象时,计数值加1;当少一个变量指向对象时,计数值减1。计数值减到0时会调用`__del__`方法释放存储空间
  - 不可变变量引用计数是没有意义的
  - 示例:

  ```python
  import sys

    # 不可变变量的引用计数没有意义
    a = 10
    print(sys.getrefcount(a))

    lt = [1, 2, 3]
    lt2 = lt
    # 本身此时引用计数为1,但是该方法也引用了一次
    print(sys.getrefcount(lt))
    del lt2
    print(sys.getrefcount(lt))

  class Person:
      def __del__(self):
          print(‘对象即将释放‘)

  p = Person()
  print(sys.getrefcount(p))
  del p
  print(‘over‘)        

原文地址:https://www.cnblogs.com/liangliangzz/p/10159334.html

时间: 2025-01-04 16:51:17

python 基础之引用计数的相关文章

Python 对象的引用计数和拷贝

Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己,可通过内建函数id(obj)查看. 2.type,对象的类型决定了该对象可以保存什么类型的值,可用内建函数type(obj)查看: 3.value,即对象的值. 下面是一个例子: >>> str = "hello world" >>> type(str

第二章 Python基础知识

第1章 第一个Pyhton程序 Pyhton的两种执行方式:交互式与脚本文件 1.1 交互式 l  交互式模式 直接在Windows或者Linux环境下打开Python解释器执行. 优点:快捷,调试方便. 缺点:不能够保存代码. C:\Users\cc>python3 Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", &quo

python基础知识点

python论坛: 1. python 脚本格式 前2行格式如下,第一行是表示用python执行,第二行是通用字符集,任何语言都能正常显示. 1)#!/usr/bin/env python 2)#_*_coding:utf-8_*_ (貌似写成#coding=utf-8也行) 其实上面的语句怎么写都行,只要符合coding[ := ]\s*([-\w.]+); 意思就是coding后面要紧紧的跟着冒号或者等号,之后可随意多少个空格,然后接utf-8,coding=utf-8前后随意加字符都行.

python基础面试题整理---从零开始 每天十题(01)

最近在弄flask的东西,好久没写博客的,感觉少了点什么,感觉被别人落下好多,可能渐渐的养成了写博客的习惯吧.也是自己想学的东西太多了(说白了就是基础太差了,只是know how,不能做到konw why). 不说那些毒鸡汤了,我们来说说我们今天的python基础面试题吧. 一,Q:python的优缺点有什么? A:优点: 1,基础语法简单易学,对于初学者来说,语法还是相对简单的,比较容易学习,网上的学习资料也很多.    2,面向对象,在python里继承和封装较多,而python的多态还是相

第三章 python基础

花了一个星期多看了 <learn python the hard way>,只能说掌握了皮毛的皮毛,今天开始学习看<core python programming>. 同样,也分享自己的学习笔记,督促自己,激励自己. 3.1 语句和语法Python 语句中有一些基本规则和特殊字符:?? 井号(#)表示之后的字符为 Python 注释?? 换行 (\n) 是标准的行分隔符(通常一个语句一行)?? 反斜线 ( \ ) 继续上一行?? 冒号 ( : ) 将代码块的头和体分开?? 语句(代

2015/8/26 Python基础(1):基本规则及赋值

Python有如下的基本规则: #后表示注释 \n是行分隔符 \是继续上一行,将过长语句分开 :分号将两个语句连接在一行中 :冒号将代码头和体分开 代码块用缩进块的方式体现 不同缩进深度分隔不同的代码块 Python文件用模块的形式组织 缩进推荐风格,缩进四个空格宽度,避免使用制表符. 赋值语句Python中,主要赋值运算符是等号( = ) 赋值不是直接将一个值赋给一个变量,对象是通过引用传递的.不管变量是新创建的还是已经存在的,都是将该对象的引用赋值给变量. C语言中,赋值语句可以当成一个表达

python的引用计数分析(二)

python所有对象引用计数被减少1的情况: 一.对象的别名被赋予新的对象; a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount(a)) b = 1.4 # 减少了一个23345455整数的引用 print(sys.getrefcount(a)) 结果:3:2 二.对象的别名被显式销毁; a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 list = [a, b] # 增加了2个引用 del a p

Python内存管理及引用计数

作为一门动态语言,python很重要的一个概念就是动态类型,即对象的类型和内存占用都是运行时确定的.(Why?)运行时,解释器会根据语法和右操作数来决定新对象的类型.动态类型的实现,是通过引用和对象的分离达到的.对象是存放在内存中的数据实体,而引用(reference)可以理解成一个封装好的指向对象的指针.不过操作更加方便和安全.就像C++中的引用是对指针操作的简化和封装一样.在python中,内存的管理,即分配与回收,都是由python解释器来做的,程序员不需要关心太多.或者,也可以把引用理解

OC基础15:内存管理和自动引用计数

1.什么是ARC? (1).ARC全名为Automatic Reference Counting,即是自动引用计数,会自动统计内存中对象的引用数,并在适当时候自动释放对象: (2).在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不用写retain. release和autorelease三个关键字: (3).在使用ARC之前,需要手动管理内存计数,这种机制称为MRC,即是手动引用计数 (Manual Referecen Counting): (4).ARC是Objective-