前言:

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

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

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. 本地在不安装Oracle的情况下安装PLSQL客户端

    本文解决问题:   通常在本地安装PLSQL后,如果本地没有安装Oracle数据库的话,PLSQL是不能使用的,输入远程数据库登录信息会提示:"Oracle Client没有正确安装&quo ...

  2. 如何在onCreate中获取View的高度和宽度

    如何在onCreate中获取View的高度和宽度 原文链接:http://mp.weixin.qq.com/s?__biz=MzAwODE1NTI2MQ==&mid=2247483676&am ...

  3. Mac 打造开发工作环境

    近日公司配的dell笔记本越来越难担重任(主要是CPU太差,本人是Java开发,IDE一编译CPU就100%),于是狠下心入手了一台常规顶配Macbook Pro,现记录新本本的调教过程. Homeb ...

  4. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  5. 从 View 的四个构造方法说起

    View 类的四个构造函数 写过自定义 View 的都知道,View 有四个构造函数,一般大家都知道第一个构造方法是简单的在代码中new View 的时候调用的,第二个构造方法使用最广泛,是对应的生成 ...

  6. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  7. MSIL实用指南-创建对象

    创建对象用Newobj指令,它的操作是创建一个新的对象或值类型,并将对象引用的新实例到计算堆栈上.格式是Newobj <构造函数>实例: ilGenerator.Emit(OpCodes. ...

  8. [Error]Win8安装程序出现2502、2503错误解决方法

    转载自:http://jingyan.baidu.com/article/a501d80cec07daec630f5e18.html 在Win8中,在安装msi安装包的时候常常会出现代码为2502.2 ...

  9. I-Just Jump_2019牛客暑期多校训练营(第八场)

    题目链接 Just Jump 题意 有L+1个点,初始在第0个点上,要跳到第L个点,每次至少跳d格,也就是在点x至少要跳到x+d,且有m个限制 \((t_i, p_i)\)指跳第\(t_i\)次不能跳 ...

  10. hdu4565 So Easy!(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4565 题解:(a+√b)^n=xn+yn*√b,(a-√b)^n=xn-yn*√b, (a+√b)^n ...