5 python中的浅拷贝和深拷贝
浅拷贝只拷贝容器本身,对集合和字典可变部分只是引用,当修改是会有影响,下面参考代码如下
import copy
list1=[1,2,[3,4]]
list2=copy.copy(list1)
list3=copy.deepcopy(list1)
list1[0]=5
list1[2][0]=6
print(list1)
print(list2)
print(list3)
输出结果如下:
[5, 2, [6, 4]]
[1, 2, [6, 4]]
[1, 2, [3, 4]]
6 线程的顺序
线程打印本身无序,除非加上 join
import threading
import time
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(threadName)s - %(message)s')
def work(num):
logging.debug(f"Working {num} starting...")
time.sleep(1)
logging.debug(f"Working {num} end.")
if __name__ == '__main__':
threads =[]
for i in range(5):
t = threading.Thread(target=work, args=(i,))
t.start()
t.join()
7 函数的闭包
目的是防止环境变量污染
outer返回的是Inner方法,但是inner方法又记住了outer传递的不可变变量,则保证了方法调用的安全
def inner(y):
return x+y
return inner
if __name__ == '__main__':
demo=outer(10)
print(demo(2))
输出结果为12, 10