前言:

没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了。

记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!!

content:

1.python中的对象和变量引用

2.del语句和垃圾回收

3.数据类型的可变性(常因为这个出现的经典错误)

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

1.python中的对象和变量引用

a.python和java中的变量本质完全不一样
  静态语言最开始的时候就分配了一个盒子,盒子里的东西是什么最开始就是定好了的
  python的变量实际上就是一个指针,可以贴在str也可以贴在int上。
  a=1的过程:
    a)先在内存中声明一块int空间,存储1
    b)然后把a贴在1这个空间上
  attention:实际上是先生成对象,然后再将a指向对象
  如果是用java或者c的话,就是把1放在a这个盒子里。
 
b.变量和值的改变  
  所以本质是,a和b都是直接贴在了那个数组的内存空间上,id是一样的。
 
c.==和is的区别
  is:判断是否是同一个对象
  ==:判断值是否相等
  b=一个值的时候,是重新生成了一个对象的。
  但是!!a=1 b=1的时候,id也是相等的。因为python中有个inten机制,对小整数的指向和小段字符串的指向,python有个内部的机制,是不会重新生成对象,而是直接引用已有的对象。
 
 
d.==是怎么判断出来的?
  跟魔法函数有关,用==的时候,用了__eque__魔法函数
 
e.如何去判断类?
  isinstance(person,Person)
  用type判断也可。
  实际上,用type判断的时候 最好不要用== 而是用is

2.del语句和垃圾回收

a.python垃圾回收机制
  python中的垃圾回收 采用的是引用计数
  a=1
  b=1
  那么1的计数器加1
  python的delete的时候,计数器减一
  如果计数器为0了那么这个对象空间会被释放
  这点和c++的不同,c++会直接回收这个对象
 
 
b.如何delete
 
c.垃圾回收的魔法函数
  __del__()
  这个方法里,可以用这个函数来解决我们希望python解释器让这个对象被回收的时候,做的事情。
  当多个引用还在的时候,用del 变量会被回收吗?
  从上面可以看出,当计数器是2的时候,删除了im,还有个x,变量是在程序结束时调用的回收函数。
  最后需要说明的是,如果父类提供了 __del__() 方法,则系统重写 __del__() 方法时必须显式调用父类的 __del__() 方法,这样才能保证合理地回收父类实例的部分属性。

3.数据类型的可变性(常因为这个出现的经典错误)

a.正常相加函数用法:
a传递进来的时候是修改了a  +=其实对list的时候是不一样的
 
b.传递list进去:
此时的a再经过add函数后,已经变了。
 
c.传递tuple进去:
此时的a没有受到影响
 
d.可变对象作为参数的坑:
可以用对象的 __init__.__default__得到
总结:尽量不要传递list参数,要明白它是可以被修改的
正常传递:
 
当没有传递list 而是直接默认的用默认的list空参数的时候
此时company2和company3中的staffs是同一个对象。
正常来说,我们想得到的是两个有不同staffs列表的对象,但是这里的company3里的staffs被修改,company2的也被修改了。不符合我们的最初意图。
这就是我们再可变参数作为传递参数时可能遇到的坑。 
 
ps. 在Python中,数值类型int 、float、 字符串str 、元祖tuple、boole 都是不可变对象
列表list、集合set、字典dict都是可变对象

PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收的更多相关文章

  1. 流畅的python 对象引用 可变性和垃圾回收

    对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...

  2. PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type

    前言: 是自己在学习python进阶IO学习视频的时候的理解和笔记,因为很多都是本菜鸟学习时候的自己的理解,有可能理解有误. Content: - 抽象的概念和面向对象的概念?想要大概了解python ...

  3. PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  4. PythonI/O进阶学习笔记_5.python的set和dict

    前言: 我一直觉得对我来说学习知识很忌讳不系统.本篇内容与上一篇 自定义序列类是有联系的. 上一篇比较通范的了解了序列类的一些协议和特性,并且有些list的内容.这篇更加具体到set和dict这两个序 ...

  5. PythonI/O进阶学习笔记_8.python的可迭代对象和迭代器、迭代设计模式

     content: 1.什么是迭代协议 2. 什么是迭代器(Iterator)和可迭代对象(Iterable) 3. 使用迭代器和可迭代对象 4. 创建迭代器和可迭代对象 5. 迭代器设计模式   一 ...

  6. PythonI/O进阶学习笔记_10.python的多线程

     content: 1. python的GIL 2. 多线程编程简单示例 3. 线程间的通信 4. 线程池 5. threadpool Future 源码分析   ================== ...

  7. PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型

    前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...

  8. PythonI/O进阶学习笔记_2.魔法函数

    前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...

  9. PythonI/O进阶学习笔记_3.2面向对象编程_python的封装

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第三篇 封装. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

随机推荐

  1. 四六级成绩还可以这样查?Python助你装B一步到位!!!

    昨天有很多同学在朋友圈秀六级成绩 一个个都如(sang)此(jin)优(tian)秀(liang) 当然也有悲催的哥们 对于上面这位老弟 我只能说:骚呢,兄弟 这种事都能赶上,必须点赞 一.需求分析 ...

  2. FastStone Capture(FSCapture) 注册码

    FastStone Capture 是一款极好用的图像浏览.编辑和截屏工具,支持 BMP.JPG.JPEG.GIF.PNG.TIFF.WMF.ICO 和 TGA 在内的主流图片格式,其独有的光滑和毛刺 ...

  3. Day 07--最终修改(三)

    2.明天着重学一下逻辑层的语法,以及界面层的数据绑定,与队友交流进度 3.今天修改也终于完成,除了搞c++以外的全部身心都放在这个东西身上也觉得它有点难搞,说明计算机不是吃素的.甚至在使用xml语法的 ...

  4. JAVA 异常汇总

    1  java.lang.ArithmeticException: / by zero 原因:当我们定义的被除数为整型时(short.int.long)会抛出此异常, 被除数为整型时不可为零.解决办法 ...

  5. SPSS数据分析方法不知道如何选择

      一提到数学,高等数学,线性代数,概率论与数理统计,数值分析,空间解析几何这些数学课程,头疼呀.作为文科生,遇见这些课程时,通常都是各种寻求帮助,班上有位宅男数学很厉害,各种被女生‘围观’,这数学为 ...

  6. springboot之swagger快速启动

    springboot之swagger快速启动 简介 介绍 可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调. 没有接触的小伙伴可以参考官网文章进行了解下demo页面. ...

  7. DB2 根据id查表

    SELECT * FROM SYSCAT.TABLES WHERE TBSPACEID = 2 AND TABLEID = 50 SELECT * FROM SYSCAT.COLUMNS WHERE  ...

  8. poj2396 Budget 上下界可行流

    Budget:http://poj.org/problem?id=2396 题意: 给定一个棋盘,给定每一行每一列的和,还有每个点的性质.求一个合理的棋盘数值放置方式. 思路: 比较经典的网络流模型, ...

  9. CF1003D Coins and Queries 贪心

    Coins and Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  10. CF940A Points on the line 思维

    A. Points on the line time limit per test 1 second memory limit per test 256 megabytes input standar ...