gj7 对象引用、可变性和垃圾回收
7.1 python变量到底是什么
#python和java中的变量本质不一样,python的变量实质上是一个指针 int str, 便利贴 a = 1
a = "abc"
#1. a贴在1上面
#2. 先生成对象 然后贴便利贴 a = [1,2,3]
b = a
print (id(a), id(b))
print (a is b)
b.append(4)
print (a) ---
1642030876232 1642030876232
True
[1, 2, 3, 4]
7.2 ==和is的区别
is 判断是否是同一个对象,id是否相等
a = [1,2,3,4]
b = [1,2,3,4] print(a == b) # 判断值是否相等
print (id(a), id(b))
print (a is b) c=1
d=1
print(c is d) # 将一定范围的小整数,内存地址进行了复用
# ---
True
1642030933512 1642030785544
False
True --- class People:
pass person = People()
if type(person) is People:
print ("yes") type(person) ---
yes
__main__.People
7.3 del语句和垃圾回收
# cpython中垃圾回收的算法是采用 引用计数
# 当计数器减为0 就会被回收
a = object()
b = a
del a
print(b)
print(a) class A:
def __del__(self): # 当被回收的时候,执行下面的逻辑
pass
7.4 一个经典的错误
为了数据的安全性,使用tuple而不是list类型来存储
def add(a, b):
a += b
return a
a = 1
b = 2
c = add(a,b)
print(c)
print(a,b)
# ---
3
1 2
# ---传递进来的list受到了影响
a = [1,2]
b = [3,4]
c = add(a,b)
print(c)
print(a,b)
# ---
[1, 2, 3, 4]
[1, 2, 3, 4] [3, 4]
# ---
a = (1,2)
b = (3,4)
c = add(a,b)
print(c)
print(a,b)
---
(1, 2, 3, 4)
(1, 2) (3, 4)
---
class Company:
def __init__(self, name, staffs=[]):
self.name = name
self.staffs = staffs
def add(self, staff_name):
self.staffs.append(staff_name)
def remove(self, staff_name):
self.staffs.remove(staff_name) com1 = Company("com1", ["lewen1", "lewen2"])
com1.add("lewen3")
com1.remove("lewen1")
print("com1.staffs:",com1.staffs) com2 = Company("com2") # 使用了默认的[],list又是可变的对象
com2.add("lewen")
print(com2.staffs) print (Company.__init__.__defaults__) # 没有传递参数时,都使用默认的【】值 com3 = Company("com3") # 使用了默认的[],list又是可变的对象
com3.add("lewen5")
print (com2.staffs)
print (com3.staffs)
print (com2.staffs is com3.staffs)
# ---
com1.staffs: ['lewen2', 'lewen3']
['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen']
(['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen'],)
['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5']
['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5']
True
-
gj7 对象引用、可变性和垃圾回收的更多相关文章
- 流畅的python 对象引用 可变性和垃圾回收
对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...
- 流畅的python第八章对象引用,可变性和垃圾回收
变量不是盒子 在==和is之间选择 ==比较两个对象的值,而is比较对象的标识 元组的相对不可变姓 元组与多数的python集合(列表,字典,集,等等)一样,保存的是对象的引用.如果引用的元素是可变的 ...
- 基于Python对象引用、可变性和垃圾回收详解
基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...
- Fluent_Python_Part4面向对象,08-ob-ref,对象引用、可变性和垃圾回收
第四部分第8章,对象引用.可变性和垃圾回收 1. 创建对象之后才会把变量分配给对象 变量是对象的标注,是对象的别名,是对象的引用,并不是对象存储的地方. 例子1. 证明赋值语句的右边先执行 class ...
- PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收
前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...
- Python 对象引用、可变性和垃圾回收
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 变量不是盒子 在示例所示的交互式控制台中,无法使用"变量是盒 ...
- Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器
frozenset:不可变集合,无序,不重复 dict上的特性: 1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tup ...
- Python对象的引用、可变性和垃圾回收
1.标识.相等性和别名 别名的例子 >>> charles = {'name': 'Charles L. Dodgson', 'born': 1832} >>> l ...
- 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块
'''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...
随机推荐
- php iconv 函数
原型: $txtContent = iconv("utf-8",'GBK',$txtContent); 特殊参数:iconv("UTF-8","GB2 ...
- python模块说明
1.模块(变量,函数,类,实现一个功能) 包:用来从逻辑上组织模块,本质是一个目录(必须带有__init__.py) 2.导入方法 import module_alex from module_ale ...
- egret 配置设置
修改index.html的时候,要主要template文件夹下的web文件夹也有个index.html,两者控制的不一样 初始安装新建项目后调试这样的情况.重新安装引擎和下载egret安装包安装,默认 ...
- 15 python re 模块
1.基础知识 正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎 正则表达式的大致匹配流程:依次拿出表达式和文本中的字符比较, 如果每一个字符都能匹配,则匹配成功:一旦有匹 ...
- vim跳转到指定行
第一种方法 在编辑模式下(非输入模式)下输入ngg 或者 nGn为指定的行数(如25)25gg或者25G 跳转到第25行. 25gg 第二种方法 在命令模式下输入行号n : n 查看当然光标所在的行和 ...
- QQ消息无限发送!源代码
昨天我一个朋友发给我一个特别有趣的程序 可以无限发送QQ消息,非常有趣! 发送给朋友之后只要打开,便可自动发送消息. 点打开后 便可一直发送消息 用Edit plus 打开后 其源代码如下 是用VB ...
- dubbo2.5.3升级到dobbo2.8.4(dubbox) jar
需要注意的地方: 1.pom文件中 dubbo的版本由2.5.3变为2.8.4,maven依赖如下: <dependency> <groupId>com ...
- Finding Hotels
Finding Hotels http://acm.hdu.edu.cn/showproblem.php?pid=5992 Time Limit: 2000/1000 MS (Java/Others) ...
- css学习-css引入&css选择
一.引入css的方式,一共有4种,我们只需要掌握三种就可以了,@import的方法我们不做掌握 1.第一种引入的方法 <!--1.第一种引入css的方法--> <h1 style=& ...
- docker搭建nginx
在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过端口访问默认的网站 设置记录访问和错误日志的路径 以交互模式创建centos容器,如果本地没有镜像,会从仓库获取, 等待即可 ...