python对象的生命周期_python对象的生命周期

引言

碰到以下问题:

代码1:

from Tkinter import *

root = Tk()

photo = PhotoImage(file=r'E:\workspace\python\111.gif')

Label(root,image=photo).grid()

root.mainloop()

这个能正常显示图片。而下面的代码却不能:

代码2:

from Tkinter import *

root = Tk()

def _test_img():

win= Toplevel(root)

photo = PhotoImage(file=r'E:\workspace\python\111.gif')

Label(win,image=photo).pack()

Button(root,text="test",command=_test_img).grid()

root.mainloop()

怀疑是生命周期的问题,引入1/0错误:

from Tkinter import *

root = Tk()

def _test_img():

win= Toplevel(root)

photo = PhotoImage(file=r'E:\workspace\python\111.gif')

Label(win,image=photo,bg='blue').pack()

1/0

Button(root,text="test",command=_test_img).grid()

root.mainloop()

这样就能正常显示图片,因python的回收机制被错误中断了。

0fe4101e85234ca0db3066a7166091f9.png

或者将photo变成全局变量也能达到同样的效果。

这里很奇怪,win/Label在函数执行完没有销毁,而photo貌似却销毁了。

python何时销毁一个对象?

关于垃圾回收机制,可以参考下这里。

问题来了:神马叫做引用?

root->win->Label--?-->photo

为何最后一环断掉了?看下PhotoImage的__init__函数,如下:

[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

hibernate 持久化对象的生命周期 2.1

持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...

Java 对象的生命周期

Java对象的生命周期 在Java中,对象的生命周期包含下面几个阶段: 1.      创建阶段(Created) 2.      应用阶段(In Use) 3.      不可见阶段(Invisib ...

管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控

如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...

Hibernate学习(4)- Hibernate对象的生命周期

1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...

Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题

主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐 ...

Java虚拟机(三)垃圾标记算法与Java对象的生命周期

前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的生命周期. 1.垃圾收集器概述 垃圾收集器( ...

随机推荐

(ios) nsnotification总结

1  文本输入,键盘显示时,view向上,键盘隐藏时,view向下 1.1 注册键盘显示,关闭通知,并实现主界面上下变动 [[NSNotificationCenter defaultCenter] a ...

Swift3.0语言教程字符串与URL的数据转换与自由转换

Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...

Oracle 部分函数使用说明

oracle有些函数可能我知道是什么作用,但是具体其实说不清楚,这里是我这几天看到的函数使用方法及说明,记录一下,以后看看 --1.replace('str',oldVal,newVal)替换功能方法 ...

ajax-1:基本实现原理

一.什么是Ajax? Asynchronous JavaScript and XML(异步JavaScript和XML) 二.实现步骤 3.Open方法 三个参数的含义 1.提交方式 Form-met ...

POJ 1422 二分图(最小路径覆盖)

Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7278   Accepted: 4318 Descript ...

HDU 1828 扫描线(矩形周长并)

Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

修改tomcat的默认编码

在tomcat的安装路径下查找conf文件下的server.xml文件,修改此文件即可,修改内容如下:

sublime 前端开发工具

http://code.kpman.cc/2014/10/14/sublime-text-3-mac-%E6%8C%87%E5%8D%97/ gif 屏幕录制:http://recordit.co/ ...

Java使用千分位并保留两位小数

double d = 123456.789; DecimalFormat df = new DecimalFormat("#,##0.00"); System.out.printl ...

07binlog日志介绍

设置日志格式为row 创建数据库和表 mysql> create database chinasoft charset=utf8mb4; mysql> use chinasoft; mys ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值