新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python的del不同于C的free和C++的delete。
创新互联服务项目包括奎文网站建设、奎文网站制作、奎文网页制作以及奎文网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,奎文网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到奎文省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。
del语句删除一些对象的引用,而不是数据。
5.2. del 语句
有个方法可以从列表中按给定的索引而不是值来删除一个子项: del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。例如:
a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
a
[1, 66.25, 333, 333, 1234.5]
del a[2:4]
a
[1, 66.25, 1234.5]
del a[:]
a
[]
del 也可以删除整个变量:
del a
此后再引用命名 a 会引发错误(直到另一个值赋给它为止)。我们在后面的内容中可以看到 del 的其它用法。
我要纠正推荐答案中的说法!
del并不是用来“删除引用指向的内存空间”,python中的del和c++中的delete是完全两个概念,不要误人子弟。。
一般来讲,del是用来删除变量的引用的,例如a = 1; del a,这里a是对1这个值的引用(python中所有的变量都可视作引用),而del a就是删除这一引用关系,也就是说,1不再被a这个变量引用了,同时a这个变量名也从变量表中剔除了。
如果还是不太清楚,我举这个例子你就明白了:
a = object()
b = a
del a
print b
print a # 该句会报a未定义的异常
这段代码中,a引用了一个新对象object(),而b=a使得b也引用了这个对象,a和b虽然是两个变量,但它们引用的是同一个对象,有点类似于c++中的两个指针指向同一个对象。
而后面del a仅仅只是把a这个变量对object()的引用删掉了,同时a的变量名也失效了,但并不表示object()这个对象被删除了,它还在,并且b还引用着它呢。从后面print b能正常输出就可以看出这一点。
python的内存释放采用的是引用计数机制,也就是当一个对象没有任何引用它的变量了,那么它就会自动被释放,无需人工干预。
此外,del对于不同的对象也会有不同的功能,这取决于对象本身对__del__系统方法的实现。例如一个列表a = [1,2,3],del a[0]表示将列表的首项删除,此时a就变成[2,3]了。如果是自定义的对象,那del的功能更是可以定义成你想要的任何样子,详情请参考python帮助中的__del__词条。
“原因”是无从考究的,我们只能列出其区别和联系:
联系:都能删除索引为1的个元素
区别:pop函数是list类的成员函数,并且有返回值,就是删除掉的这个元素;del是全局函数,没有返回值。
如果题主忘了什么叫返回值,可以看下面这个例子:
a = [1, 2, 3, 4]
b = a.pop(1) # 得到pop函数的返回值:b=1
a.pop(1) # 这样也是可以的,我们可以选择忽略pop函数的返回值
del(a[1]) # 这时a里只剩下一个元素
而这样则是非法的:
a = [1, 2, 3]
b = del(a[1]) # 因为del函数不能有返回值
所以,如果忽略掉可否有返回值这一点,这两个用法是等效的。
首先我们要清楚python中的del函数不同于C的free和C++的delete。
由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。
我们来看一个例子:
del删除的是变量,而不是数据。
我们再来看:
推荐教程:python教程以上就是小编分享的关于python中del函数的用法的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
__del__()方法
python_del用法:
import time
class Animal(object):
# 初始化方法
# 创建完对象后会自动被调用
def __init__(self, name):
print('__init__方法被调用')
self.__name = name
# 析构方法
# 当对象被删除时,会自动被调用
def __del__(self):
print("__del__方法被调用")
print("%s对象马上被干掉了..."%self.__name)
# 创建对象
dog = Animal("哈皮狗")
# 删除对象
del dog
cat = Animal("波斯猫")
cat2 = cat
cat3 = cat
print("---马上 删除cat对象")
del cat
print("---马上 删除cat2对象")
del cat2
print("---马上 删除cat3对象")
del cat3
print("程序2秒钟后结束")
time.sleep(2)