之前我们学过del操作

del 变量名 或者 del (变量名)

del操作 可以切断数据和引用位置的联系

切断引用后,a 没有引用任何数据,1也没有任何变量引用,所以双双被释放掉

a = 1

del a

print(a)

del()方法,在c语言中成为析构函数

在对象被释放前自动执行该方法,执行后,对象立即被释放

定义类

class Person(object):

def init(self,name, age):

self.name = name

self.age = age

p1 = Person('Rose', 18)

del p1

NameError: name 'p1' is not defined

在这种情况下,我们能否知道p1已经被释放了? 没有提示

如果已经被释放了还继续使用,是不是会报错? 会报错

我么你怎样去进行提示? 使用del()

print(p1)

class Person(object): def init(self, name, age): self.name = name self.age = age

def __del__(self):print('我被释放了,真爽',self.name)

p1 = Person('Rose', 18)

del p1 # 使用del造成p1被提前释放,在程序结束前将对象释放了

p1被释放后,我们就接收到了提示,证明p1不存在了,之后就不要使用了

print(p1)

如果没有del操作,则在程序结束后,会将所有的变量进行统一释放

print('程序结束')

结论:在对象被释放时,会自动调用del方法,并且,使用del操作可以提前释放对象,否则在程序结束后,也会将变量统一释放

如果一个对象,或者说同一块内存空间,被多个变量引用,使用del可以释放么?

p2 = p1 # p1和p2指向同一内存空间,或者说两个变量引用同一个数据

del p1

# 如果只删除p1的引用,对象还被p2引用着,该对象不会被释放,必须切断所有引用,才能正常 释放

del p2

# 如果将p2的引用也切断了,则对象正常释放

print('程序结束')

结论:对象被引用时无法释放,除非程序终止,如果一个对象被多个变量引用,必须将所有引用切断才能正常释放,否则无法释放对象

举例:多个主人牵一条狗,如果有一个主人没有撒手,狗也跑不了

p4 = None def func(): p3 = Person('xiaoming', 15) global p4 p4 = p3 print(p3)

func()

上述代码可以推断,在函数执行完成后,出了作用域,会将函数内所有的临时变量释放掉,除非其被外部变量引用

print('程序结束')

切断引用或释放对象的几个场景

1.出了函数作用域会自动释放函数内的局部变量

2.程序结束会自动释放所有的变量

3.使用del操作可以提前释放变量

--del--() 方法相关推荐

  1. python特殊变量方法 不懂_Python中的常见特殊方法—— del方法

    __del__() 方法用于销毁Python对象--在任何Python对象将被系统回收的时候,系统都会自动调用这个方法.但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果 ...

  2. python3 : remove,pop和del方法的区别

    这三种方法都是list的删除方法,其中remove是针对可变列表的元素进行搜索删除,而pop和del是针对可变列表的下标进行搜索删除.具体区别如下: 1. remove remove(item)方法是 ...

  3. python对象的 init 和 del 方法

    对象的初始化方法__init__ 当使用类名()创建对象时,会自动执行以下操作: 为对象在内存中分配空间 ,即创建对象 为对象的属性设置初始值,即初始化方法(__init__) [定义属性] __in ...

  4. php file del 方法,php怎么遍历文件删除指定字符

    php遍历文件删除指定字符的实现方法:首先创建一个PHP示例文件:然后通过"function del($getstr){-}"方法删除指定目录下所有指定文件中指定字符串即可. 本文 ...

  5. python的del方法_关于python:__ del__方法是什么,如何调用它?

    我正在阅读代码. 在其中定义了__del__方法的类. 我发现此方法用于销毁类的实例. 但是,我找不到使用此方法的地方. 其主要原因是我不知道如何使用此方法,可能不是这样:obj1.del(). 因此 ...

  6. angular HttpClient post put patch del 方法(2)-Promise 服务

    之前做了在一个页面的CRUD的方法,现实中webapi模块往往是单独写服务的,所以修改了一下原来的设计和结构,还是需要很多知识的. 2017.11.15增加patch方法 ,改进服务程序优化写法 20 ...

  7. 内置方法-del方法和对象的生命周期

    class Cat:def __init__(self, new_name):self.name = new_nameprint("%s 来了" % self.name)def _ ...

  8. Python List 列表list()方法

    Python基础数据类型之一列表list,在python中作用很强在,列表List可以包含不同类型的数据对像,同时它是一个有序的集合.所有序列能用到的标准操作方法,列表也都可以使用,比如切片.索引等, ...

  9. Python内置方法

    一.常用的内置方法 1.__new__ 和 __init__: __new__ 构造方法 .__init__初始化函数 1.__new__方法是真正的类构造方法,用于产生实例化对象(空属性).重写__ ...

  10. python的__new__方法和__del__方法

    new()方法会在init之前调用 >>> class CapStr(str):def __new__(cls,string):string = string.upper()retu ...

最新文章

  1. mac 打开html c python,在Mac系统使用Visual Studio Code运行Python的方法
  2. Codeforces 1109F. Sasha and Algorithm of Silence's Sounds
  3. python编写ftp客户端_用Python写FTP客户端程序
  4. Programming with gtkmm 3
  5. 大话数据结构08:共享栈 C++
  6. WDCP管理面板安装启动EXIF、bcmath完整步骤
  7. python find函数实现原理_非常干货:Python 探针实现原理
  8. 3.3亿人都在用小程序,中国首次定义的互联网标准又有新进展
  9. 【转】 详解C中volatile关键字
  10. linux环境编程做的是什么,Linux环境
  11. appcode破解方法
  12. 【持续更新】1996-2022历代AMD Radeon桌面显卡列表,Radeon显卡发布日期
  13. idea使用mvn命令打包报错 不可用
  14. ant design table列表 合并列单元格
  15. lsass.exe和smss.exe病毒专杀工具——即磁碟机病毒专杀工具(转载)
  16. 温度补偿计算公式_基于温度压力补偿计算的燃气表计量方法与流程
  17. vue 之 路由懒加载
  18. 小程序中循环套循环的怎么解
  19. jsp网站服务器配置
  20. 在C#中调用条码标签打印机中的动态链接库PPLA/PPLB(Argox)

热门文章

  1. 网络原理实验2 路由器的基本配置
  2. element-ui+mongodb+express项目的实现(含源代码)
  3. word文档图标变成白色
  4. php代码如何在dw输入,Dreamweaver CC
  5. vue中的key的作用?
  6. 计算机辅助设计技术的应用研究,计算机辅助设计软件在室内设计中的应用研究...
  7. 论文笔记-DEC (Deep Embedded Clustering)
  8. 将XBMC中的电影收藏与电影集合并
  9. kernelbase.dll故障怎么处理-kernelbase.dll修复工具下载
  10. 域安全|非约束委派攻击 Exchange 2013的安装