美文网首页工作生活
python学习之路_面向对象编程之对python内存回收理解

python学习之路_面向对象编程之对python内存回收理解

作者: 风雪_夜归人 | 来源:发表于2019-07-05 00:56 被阅读0次

代码示例

class User:
  name = "张飞"
  age = 0
  nick_name = "二狗子"
  def __init__(self,name,age):
    self.name=name
    self.age=age
    self.get_nick_name()

  def get_nick_name():
    if self.age<18:
      self.nick_name="小鲜肉"
    elif self.age in range(18,30):
      self.nick_name="男神"
    else:
      self.nick_name="老腊肉"
     return nick_name 

============================================================

user1 = User('李四',17)
user2 = User('李五',27)
print(user1.name+","+str(user1.age)+","+user1.nick_name)
print(user2.name+","+str(user2.age)+","+user2.nick_name)
print(User.name+","+str(User.age)+","+User.nick_name)

============================================================

执行结果
李四,17,小鲜肉
李五,27,男神
张飞,0,二狗子


调用内存展示图

image.png
  • 1 先将变量user1开辟一个内存空间,存放user类对象实例user1的内存空间(如图1)
  • 2 User类,也开辟一个类空间,存放类中定义的成员属性(如图2)
  • 3 ("李四",17)初始化方法,方法的执行也要开辟一个内存空间(如图3)
    • 3.1 这时图3就是User类对象user1的实例地址,目前地址无数据
      • 3.1.1 运行初始化方法init那个,既然是方法执行再次开辟内存空间(如图4)
      • 4.1.1该方法有3参数,
        self:user1的实例地址
        初始化方法传的参数age,name分别给内存空间中的age,name赋值
        name="李四"
        age=17
        执行代码self.name=name,将4图的值,通知内存地址存给图3
        age同理
    • 3.2 这时地址内存数据为
      name="李四"
      age=17
      • 4.1.2该方法有3参数,
        self:user1的实例地址
        执行get_nick()方法,开辟内存空间(如图五)
        • 5.1 图五内存空间数据
          self:user1的实例地址
          将跑完程序得出的nick_name赋值给user1的实例地址。跑完的同时回收图五库存
      • 4.1.3该方法有3参数
        图五代码内存回收后,也会回收图四的内存
    • 3.3 这时地址内存数据为
      name="李四"
      age=17
      nick_name="小鲜肉"
      这时图1的内存空间user1指向图三的内存地址

然后再看下面打印语句中的内容

  • user1.name
    就是从图1的内存中找到user1的内存空间,通过user1内存空间的地址找到内存空间图三里面的name属性。age也是同理。
  • User.name 是通过类名直接调用里面的属性,就是从图2,类从类空间直接获取name、age的值。
  • 当一个类有多个实例时,类的类空间只会开辟一次,在第一次实例开辟内存之前。当第二个实例开辟内存空间时,类不会再次开辟内存空间存放类中的属性

相关文章

  • python学习之路_面向对象编程之对python内存回收理解

    代码示例 调用内存展示图 1 先将变量user1开辟一个内存空间,存放user类对象实例user1的内存空间(如...

  • python基础-02

    Python 面向对象 python是一门面向对象的语言 Python内置类属性 python对象销毁(垃圾回收)...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • python学习一

    1 python 如何管理内存 对象引用计数机制,垃圾回收机制,内存池机制 一。对象引用机制 python内部引用...

  • python学习笔记目录

    Python学习笔记目录(倒序) Python学习-异常 Python学习-面向对象 Python学习-文件系统 ...

  • python面向对象之基本篇

    在学习python面向对象的时候,确保自己对python基础已经有所掌握,包括python安装使用,python基...

  • 总结python的内存回收机制

    python的内存回收以引用计数为主,分代回收和标记清除为辅的回收策略。 引用计数 python中一切都是对象: ...

  • Python精简入门学习(十四)

    Python精简入门学习之面向对象(oop) -面向对象 -类和对象

  • python解释器

    # python 解释器模块开发问题(自我学习的成长之路) 在python面向对象模块开发过程中,模块的搜索顺序根...

  • Python 面向对象编程

    Python 面向对象编程(一) Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象...

网友评论

    本文标题:python学习之路_面向对象编程之对python内存回收理解

    本文链接:https://www.haomeiwen.com/subject/dtxjhctx.html