Python 清除函数外部的数据(列表/目录/元组)

Python 清除函数外部的数据(列表/目录/元组),python,function,variables,Python,Function,Variables,我正在编写一个程序,在循环遍历存储在变量中的特定数据之后,我不再需要它了。但是,我希望重用该变量,以便稍后在程序中使用。我不确定这是否是最好的方法,但似乎摆脱不再需要的数据并重用变量可以保持代码更干净,使用更少的资源 例如: data = [#Lots and lots of data] def loopThroughdata(data): #here I loop through data and extract what I need #Finally, I'd

我正在编写一个程序,在循环遍历存储在变量中的特定数据之后,我不再需要它了。但是,我希望重用该变量,以便稍后在程序中使用。我不确定这是否是最好的方法,但似乎摆脱不再需要的数据并重用变量可以保持代码更干净,使用更少的资源

例如:

  data = [#Lots and lots of data]

  def loopThroughdata(data):
     #here I loop through data and extract what I need
     #Finally, I'd like to reset the data variable to empty
     data = []
>>> data = [1,2,3]
>>> def something(data):
...     print data
...     data[:] = []
... 
>>> print data
[1, 2, 3]
>>> something(data)
[1, 2, 3]
>>> data
[]

我已经尝试过像上面的例子那样重置数据变量,但它似乎不起作用。我是否忽略了为什么这是不可能的,还是我做错了什么?

函数的第一行应该是
全局数据
,表示函数中使用的数据变量是您全局声明的数据变量。

这不起作用的原因是这里有两个不同的变量。在函数内部,当你说

data = []
您正在将参数
data
更改为新的空列表,但您根本没有更改全局变量
data

奇怪的是,尽管这里有两个变量,但每个变量的值实际上是对包含列表元素的存储的引用。实际上,您可以通过以下方式清空此存储

data[:] = []
这将产生使全局
数据
为空的效果

例如:

  data = [#Lots and lots of data]

  def loopThroughdata(data):
     #here I loop through data and extract what I need
     #Finally, I'd like to reset the data variable to empty
     data = []
>>> data = [1,2,3]
>>> def something(data):
...     print data
...     data[:] = []
... 
>>> print data
[1, 2, 3]
>>> something(data)
[1, 2, 3]
>>> data
[]
这与Python中的思想有关,在Python中,所有内容都是按值传递的,但对象的“值”是对对象的引用


至于以后是否应该“清空”列表并“重用”变量以用于其他用途,这听起来确实有点奇怪,但我想这取决于您试图做什么。

这是一个范围问题。