前言:

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

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

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. mysql5.7绿色版配置以及找不到 mysql服务问题解决

    一.下载软件 1. 进入mysql官网,登陆自己的Oracle账号(没有账号的自己注册一个),下载Mysql-5.7.17,下载地址:http://dev.mysql.com/downloads/my ...

  2. 服务注册组件——Eureka高可用集群搭建

    服务注册组件--Eureka高可用集群搭建 什么是Eureka? 服务注册组件:将微服务注册到Eureka中. 为什么需要服务注册? 微服务开发重点在一个"微"字,大型应用拆分成微 ...

  3. python编辑已存在的excel坑: BadZipFile: File is not a zip file

    背景-原代码如下,期望能自动创建excel,并且可以反复调用编辑: import xlwt,osfrom openpyxl.styles import Font, colors class Write ...

  4. Selenium+java - PageFactory设计模式

    前言 上一小节我们已经学习了Page Object设计模式,优势很明显,能更好的体现java的面向对象思想和封装特性.但同时也存在一些不足之处,那就是随着这种模式使用,随着元素定位获取,元素定位与页面 ...

  5. 线上ZK问题排查

    问题描述 测试环境ZK集群的三个节点中zk1状态虽然是follower,启动也能正常启动(通过telnet也能telnet 2181端口); 无法通过zk客户端去连接2181端口,状态一致是CONNE ...

  6. 一个最简单的通过自定义注解形式实现AOP的例子

    1.首先实现AOP实例的第一步即声明切面类,两种方式(1.基于注解形式@Aspect,2.基于xml配置,一般都通过注解来声明切面类) 2.切入点表达式大致也有两种,一种是直接根据方法的签名来匹配各种 ...

  7. app发布当天,用户无法登录

    原因:当用户登录时候有商城用户的触发器存在,它会让商城用户也更新成登录状态. 由于用户量大,导致数据库锁死. 最后解决案:删掉触发器,在app的接口登录程序里,追加商城用户更新成登录的操作. 他案1: ...

  8. Requests+正则表达式爬取猫眼电影(TOP100榜)

    猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...

  9. NDK Cmake

    CMake与NDK搭配使用时,可以配置的部分变量: 1. `ANDROID_PLATFORM`:指定Android的目标版本,对应`$NDK/platforms/`目录下的版本.通常情况下是`defa ...

  10. vsftpd 530 Login incorrect问题处理

    vsftpd 530 login incorrect 的N中情况 1.密码错误. 2.检查/etc/vsftpd/vsftpd.conf配置 vim /etc/vsftpd/vsftpd.conf 看 ...