我正在使用python列表,我想在不使用它的时候从内存中删除一个列表。(我有一个很大的数据列表,可能有几千或几百万的elements..data类型-> float)
我尝试了这段代码,看看在python中删除是如何工作的(示例)。
import sys
array=[[12,34,54],[23,45,54,67]]
print(sys.getsizeof(array)) # it gives me result 80
#then
del(array[:])
print(sys.getsizeof(array)) #it gives me result 64?
为什么会发生这种情况
我正在尝试编写一些代码来操作列表,如下所示:
>>> a = [[0,0],[0,1],[0,2]]
>>> b = a[1]
>>> b[1] = 3
>>> a
[[0,0],[0,3],[0,2]]
>>> # So far so good
>>> del b
>>> a
[[0,0],[0,3],[0,2]]
>>> # Huh.
如何使用指向某个项目的变量从列表中删除该项目?
编辑:
好吧,看起来这个操作在Python中是不可能的,考虑到它与
我仍然在学习python的基础知识,我刚刚花了一段时间阅读如何从python中的列表中从for循环中删除一个项。我所读到的每一篇文章都说明了这样做的复杂方式,他们说,在迭代列表时,不能从列表中删除项目。然而..。这似乎是可行的:
class Object():
def __init__(self):
self.y = 0
object_list = [Object(), Object(), Object()]
for thing in object_list:
thing.y += 1
if thing.y > 10:
obje
我有一个类,将所有创建的引用存储在一个静态列表中,如下所示:
class A:
_List = []
def __init__(self):
A._List.append(self)
def __del__(self):
A._List.remove(self)
现在,如果我执行以下操作:
a = A()
del a
a不会被删除,因为它仍在列表中被引用。但是如果调用析构函数,引用就会被销毁。有没有办法以某种方式强制python执行__del__方法,以便将其从静态列表中删除?
我正在尝试理解python中迭代器的概念,并在Python 3.5.2中尝试了这一点。
x = list(range(1000)) # size of x is 9112 bytes
y = iter(x) # size of y is 56 bytes
del x
x = list(y) # size of x is again 9112 bytes
迭代器如何存储关于它必须生成的序列的信息?
它不包含所有元素,但即使在删除原始列表之后,我们仍然能够从迭代器中重新生成原始列表?
如果它不包含所有元素,那么即使在删除x之后,它如何知道哪
如何关闭Python线程,以确保线程中内存中的所有内容都从内存中清除?目前,我以下列方式加入了一个线程列表:
for t in threadlist:
t.join(5)
这些线程最初是在一个参数列表上创建的,该列表通过myfunc将结果附加到列表中传递给每个线程:
threadlist = []
for r in arglist:
t = Thread(target=myfunc, args=(r,))
t.daemon = True
threadlist.append(t)
当我使用pympler查看内存中的内容时,线程调用的函数中的所有东西在执行之后都保留
我知道Python处理对象时,它使用对对象的“引用”,而不是真正的值本身。
但是下面代码的行为对我来说似乎很奇怪。
将5个虚拟对象引用从prev复制到now列表,然后清除prev。
那么,存储在now中的引用不也应该失效吗?
class dummy:
pass
prev = [dummy() for _ in range(5)]
now = []
for d in prev:
now.append(d)
for idx in range(5):
print(prev[idx] is now[idx]) # all True - so, same referenc
执行以下示例代码以从列表中删除元素:
l = ['A', 'B', 'C', 'D']
for x in l:
print(x, l)
if x == 'A' or x == 'B':
l.remove(x)
print(l)
Python2.x和Python3.x的输出都是:
$ python3 test.py
在运行for循环和从列表中删除条目(清除无效urls)时,会出现一些令人困惑的行为:
urls = ['http://a.com/?mail=a@b.com','mailto:a@a.com', 'mailto:a@b.com', 'mailto:a@c.com', 'mailto:a@d.com']
for s in urls:
if '@' in s and '?' not in s:
urls.remove(s)
print(urls)
输出为:
[
在用python2.7编写的长时间运行的python脚本中,我使用了很多列表。我正在使用pympler来识别泄漏的内存,并且我发现列表对象内存正在增加,,.But,我在每次迭代中清除了所有列表。RES内存正在增加largely.After 3分钟的执行时间,脚本使用130 MB的RES内存,我清除了所有列表并删除了在每次迭代中引用的所有对象。我清楚地列出了以下内容:
del list1[:]
我删除通过以下方法引用的对象:
obj=demo_class()
some code
del obj
请帮我减少记忆?
谢谢PyNico,我尝试过删除对对象的引用并手动使用gc.c
我正在学习用python编写代码,并编写了下面的代码来解决列表中的两个求和问题。我的做法如下:
接受列表L中的元素,从目标sum中减去元素值,检查该值是否存在于list 中,如果存在,则将其索引添加到新列表中,并从原始列表L中删除该值。
如果我删除了“remove”命令,但是给出了双重结果,我的代码就会运行良好。请帮助我识别错误。
l=[]
def two_sum(l,sval):
result=[]
for i in range(len(l)):
new=sval-l[i]
if new in l:
result=res
我正在使用Python中的Beautiful从HTML文件中刮取一些数据。在某些情况下,Beautiful返回包含string和NoneType对象的列表。我想过滤掉所有的NoneType对象。
在Python中,包含NoneType对象的列表是不可迭代的,因此列表理解不是其中的一个选项。具体来说,如果我有一个包含lis的列表NoneTypes,并且我尝试执行类似于[x for x in lis (some condition/function)]的操作,Python会抛出错误TypeError: argument of type 'NoneType' is not itera
在考虑内置的Python列表方法时,我遇到了一个问题。
在我学习Python的过程中,我总是认为Python的赋值器,就像任何值类赋值器一样,会返回它创建的新变量。
举个例子:
a = range(5)
# will give [0, 1, 2, 3, 4]
b = a.remove(1)
# as I learned it, b should now be [0, 2, 3, 4]
# what actually happens:
# a = [0, 2, 3, 4]
# b = None
这个列表变异器不返回新列表的主要问题是,您不能随后对多个突变进行操作。假设我想要一个从0到5的列表,没
可能重复:
我试图从python的列表中删除一个项目:
x = ["ok", "jj", "uy", "poooo", "fren"]
for item in x:
if len(item) != 2:
print "length of %s is: %s" %(item, len(item))
x.remove(item)
但它不会删除"fren"项。有什么想法吗?