Python3中的map函数调用后内存释放问题
作者:mr.sorghum
这篇文章主要介绍了Python3中的map函数调用后内存释放问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Python3 map函数调用后内存释放
首先看一下map函数的运行规则
date = {'age': 15, 'name': 'lili', 'sex': 'girl'} delete_module = ['name', 'sex'] a = map(lambda x: date.pop(x), delete_module) print(date) p = list(a) print(date)
运行结果: 只有对map的结果a做了调用(list)才会对date做处理
{‘age’: 15, ‘name’: ‘lili’, ‘sex’: ‘girl’}
{‘age’: 15}
由此当对map结果多步处理时,处理完第一步时由于内存释放所造成进一步的问题
例子:
import pandas as pd d = {'p': {'a': [1, 2, 3, 4], 'b': [4, 5, 6, 7]}} p = map(lambda x: d['p'], d) print(list(p)) a = map(lambda r: r['a'], p) print(list(a)) b = map(lambda x: x['b'], p) list(b)
运行结果 当list§后,p所保留的数据也就释放了
[{‘a’: [1, 2, 3, 4], ‘b’: [4, 5, 6, 7]}]
[]
[]
import pandas as pd import numpy as np d = {'p': {'a': [1, 2, 3, 4], 'b': [4, 5, 6, 7]}} p = map(lambda x: d['p'], d) a = map(lambda r: r['a'], p) print(list(a)) b = map(lambda x: x['b'], p) list(b)
[[1, 2, 3, 4]]
[]
解决方法:
目前只想到了深拷贝的方法
import pandas as pd import numpy as np import copy d = {'p': {'a': [1, 2, 3, 4], 'b': [4, 5, 6, 7]}} p = map(lambda x: d['p'], d) x=copy.deepcopy(p) a = map(lambda r: r['a'], p) print(list(a)) b = map(lambda y: y['b'], x) list(b)
python3 map函数
按照crossin的说法
使用map函数可以直接输出列表
>>> list1 = [ 0, 1, 2, 3, 4, 5, 6 ] >>> list2 = map(lambda x:x*2,l1)
结果应为:
>>> print(list2)
[0,2,4,6,8,10,12]
但应用于python3
输出的结果并非如此,而是这样的:
<map object at 0x00000000021DA860>
所以要使用map函数
必须要这样写:
lst_1=[1,2,3,4,5,6] lst_2=map(lambda x:x*2,lst_1) print(list(lst_2)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。