python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python3 map函数调用后内存释放

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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文