Python对象的引用、可变性和垃圾回收
1、标识、相等性和别名
- 别名的例子
>>> charles = {'name': 'Charles L. Dodgson', 'born': 1832}
>>> lewis = charles
>>> lewis is charles
True
>>> id(charles)
139996185268800
>>> id(lewis)
139996185268800
2.相等性的例子
>>> charles = {'name': 'Charles L. Dodgson', 'born': 1832}
>>> alex = {'name': 'Charles L. Dodgson', 'born': 1832}
>>> alex == charles
True
>>> alex is charles
False
>>> id(alex)
139996185193136
>>> id(charles)
139996185268800
2、默认做浅复制
复制列表(或多数内置的可变集合)最简单的方式是使用内置的类型构造方法。
>>> l1 = [12,123,22,213,222,1221]
>>> l2 = list(l1)
>>> l2 == l1
True
>>> l2 is l1
False
>>> l1 = [3, [66,55,44], (7,8,9)]
>>> l2 = l1[:]
>>> l1.append(100)
>>> l1
[3, [66, 55, 44], (7, 8, 9), 100]
>>> l1[1].remove(55)
>>> print('l1', l1)
l1 [3, [66, 44], (7, 8, 9), 100]
>>> print('l2', l2)
l2 [3, [66, 44], (7, 8, 9)] >>> l2[1] += [33,22]
>>> l2[2] += (10,11)
>>> print('l1', l1)
l1 [3, [66, 44, 33, 22], (7, 8, 9), 100]
>>> print('l2', l2)
l2 [3, [66, 44, 33, 22], (7, 8, 9, 10, 11)]
3、深复制
import copy class Bus(object):
def __init__(self, passengers=None):
if passengers is None:
self.passengers = []
if passengers is not None:
self.passengers = list(passengers) def drop(self, name):
self.passengers.remove(name) def pick(self, name):
self.passengers.append(name) bus1 = Bus(['Alice', 'Bill', 'Claire', 'David'])
bus2 = copy.copy(bus1)
bus3 = copy.deepcopy(bus1)
bus1.drop('Bill')
bus1.pick('tom')
print(bus1.passengers)
print(bus2.passengers)
print(bus3.passengers)
# -------------------------
# bus1 ['Alice', 'Claire', 'David', 'tom']
# bus2 ['Alice', 'Claire', 'David', 'tom']
# bus3 ['Alice', 'Bill', 'Claire', 'David']
浅复制时,bus1和bus2,公用了一个列表对象,这个是可变对象
Python对象的引用、可变性和垃圾回收的更多相关文章
- 流畅的python第八章对象引用,可变性和垃圾回收
变量不是盒子 在==和is之间选择 ==比较两个对象的值,而is比较对象的标识 元组的相对不可变姓 元组与多数的python集合(列表,字典,集,等等)一样,保存的是对象的引用.如果引用的元素是可变的 ...
- 流畅的python 对象引用 可变性和垃圾回收
对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...
- 基于Python对象引用、可变性和垃圾回收详解
基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...
- PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收
前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...
- Fluent_Python_Part4面向对象,08-ob-ref,对象引用、可变性和垃圾回收
第四部分第8章,对象引用.可变性和垃圾回收 1. 创建对象之后才会把变量分配给对象 变量是对象的标注,是对象的别名,是对象的引用,并不是对象存储的地方. 例子1. 证明赋值语句的右边先执行 class ...
- Python 对象的引用计数和拷贝
Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...
- Java中的引用类型(强引用、弱引用)和垃圾回收
Java中的引用类型和垃圾回收 强引用Strong References 强引用是最常见的引用: 比如: StringBuffer buffer = new StringBuffer(); 创建了一个 ...
- JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注意:本文主要参考自<深入理解Java虚拟机(第二版)> 说明:查看本文之前,推荐先知道JVM ...
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
注意:本文主要参考自<深入理解Java虚拟机(第二版)> 说明:查看本文之前,推荐先知道JVM内存结构,见<第一章 JVM内存结构> 1.内存回收的区域 堆:这是GC的主要区域 ...
- netty 引用计数器 ,垃圾回收
netty 引用计数器 ,垃圾回收 https://blog.csdn.net/u013851082/article/details/72170065 Netty之有效规避内存泄漏 https://w ...
随机推荐
- python3 ssl导入失败
make LibreSSL 2.6.4 and earlier do not provide the necessary APIs /root/Python-3.7.0/build/lib.linux ...
- python 连接ORacle11g
一,准备软件 (1)cx_Oracle (2)instantclient 注: (1)instantclient是Oracle客户端,plsql称为数据库第三方可视化工具,即便装了plsql也还是要装 ...
- 微信小程序的z-index在苹果ios无效
1.在微信开发者工具可以正常显示 2.在安卓真机手机可以正常显示 3.在ios手机真机无法正常显示 原因:父级view的css属性有 position: fixed; ,把它注释掉即可
- nginx retryfiles
# Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #根据路由设 ...
- python : 设计模式之外观模式(Facade Pattern)
#为啥要用外观模式举例说明 这个例子很形象,直接从人家博客上贴过来的,参考链接在下面 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶.茶具和开水,如图1(A)所示,而 ...
- Tosca IE 浏览器的Internet Options 配置, 解决login很慢的问题
Screen 1-3 Screen 4-6 Screen 7
- Spring Boot TImer Schedule Quartz
Spring Boot 2.X(十二):定时任务-云栖社区-阿里云https://yq.aliyun.com/articles/723876?spm=a2c4e.11155472.0.0.2f8b3a ...
- 主外键 设置 on update cascade 和on delete cascade 的区别
on update cascade 和on delete cascade 的区别 这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的.updat ...
- python获取公网ip的几种方式
python获取公网ip的几种方式 转 https://blog.csdn.net/conquerwave/article/details/77666226 from urllib2 import u ...
- [转][osg]探究osg中的程序设计模式【目录】
作者:3wwang 原文接连:http://www.3wwang.cn/html/article_104.html 前序 探究osg中的程序设计模式---开篇 探究osg中的程序设计模式---创造性模 ...