深复制与浅复制、多线程、tkinter 模块
copy & deepcopy 浅复制 & 深复制
id
- Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。
- 一个对象的id值在CPython解释器里就代表它在内存中的地址。
>>> import copy
>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
2330827996232
>>> id(b)
2330827996232
>>> id(a) == id(b)
True
>>> b[0] = 22222
>>> print(a, b)
[22222, 2, 3] [22222, 2, 3]
浅拷贝
- 当使用浅拷贝时,python只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
>>> import copy
>>> a = [1, 2, 3]
>>> c = copy.copy(a)
>>> id(c)
2330828059336
>>> print(id(a) == id(c))
False
>>> c[1] = 22222
>>> print(a, c)
[1, 2, 3] [1, 22222, 3]
深拷贝
- deepcopy对外围和内部元素都进行了拷贝对象本身,而不是对象的引用。
>>> import copy
>>> a = [1, 2, [3, 4]]
>>> d = copy.copy(a)
>>> id(a) == id(d)
False
>>> id(a[2]) == id(d[2])
True
>>> a[2][0] = 3333
>>> d
[1, 2, [3333, 4]]
>>> e = copy.deepcopy(a)
>>> a[2][0] == 333
False
>>> e
[1, 2, [3333, 4]]
多线程
threading
- 多线程 Threading 是一种让程序拥有分身效果. 能同时处理多件事情。
- 一般的程序只能从上到下一行行执行代码, 不过 多线程 (Threading) 就能打破这种限制。
multiprocessing
- 多线程 (Threading) 是有劣势的,GIL 让它没能更有效率的处理一些分摊的任务。
- 现在的电脑大部分配备了多核处理器,多进程能让电脑更有效率的分配任务给每一个处理器,这种做法解决了多线程的弊端,也能很好的提升效率。
tkinter模块
窗口视窗
- Tkinter 是使用 python 进行窗口视窗设计的模块。
- 它的优点是构造简单, 多平台, 多系统的兼容性。
- 它在 python 窗口视窗模块中是一款简单型的模块,能让你快速入门定制窗口文件。