python语句 del a[2:4] 什么意思pyhton中del语句可以用来删除列表中某一个元素或者是某一个片段,只需要给出元素所在的索引值,而不需要给出元素的具体值 。del a[2:4]就是指删除列表a中索引2到索引4的值,但不包括4 。
代码示例:
python的 del 函数是删对象还是删引用1.首先介绍下python的对象引用
1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用 。即Python不允许程序员选择采用传值或传引用 。Python参数传递采用的是“传对象引用”的方式 。实际上,这种方式相当于传值和传引用的一种综合 。如果函数参数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象 。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过"传值"来传递对象 。
2)当复制列表或字典时,就复制了对象列表的引用 , 如果改变引用的值,则修改了原始的参数 。
3)为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次 。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象 , 则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象 。
2. 可变对象与不可变对象的概念与分类
Python在heap中分配的对象分成2类:
不可变对象(immutable object):Number(int、float、bool、complex)、String、Tuple. 采用等效于“传引用”的方式 。
可变对象(mutable object):List、dictionary.采用等效于“传值”的方式 。
3. del 是删除引用而不是删除对象 , 对象由自动垃圾回收机制(GC)删除
看这个例子:
x = 1
del x x
Traceback (most recent call last):
File "pyshell#28", line 1, in module
x
NameError: name 'x' is not defined x = ['Hello','world'] y = x y
['Hello', 'world'] x
['Hello', 'world'] del x x
Traceback (most recent call last):
File "pyshell#32", line 1, in modulex
NameError: name 'x' is not defined y
['Hello', 'world']
可以看到x和y指向同一个列表,但是删除x后,y并没有受到影响 。这是为什么呢?
The reason for this is that you only delete the name,not the list itself,In fact ,there is no way to delete values in python(and you don’t really need to because the python interpreter does it by itself whenever you don’t use the value anymore)
举个例子,一个数据(比如例子中的列表),就是一个盒子,我们把它赋给一个变量x,就是好像把一个标签x贴到了盒子上 , 然后又贴上了y,用它们来代表这个数据,但是用del删除这个变量x就像是把标有x的标签给撕了,剩下了y的标签 。
再看一个例子:
shoplist = ['apple', 'mango', 'carrot', 'banana']print ('The first item I will buy is', shoplist[0])
olditem = shoplist[0]del shoplist[0]#del的是引用,而不是对象print ('I bought the',olditem)print ('My shopping list is now', shoplist)print(shoplist[0])
结果为:
The first item I will buy is apple
I bought the apple
My shopping list is now ['mango', 'carrot', 'banana']
mango
实例补充:
#!/usr/bin/evn python# -*- coding:utf-8 -*-# Author: antcolonies'''python中的内置方法del不同于C语言中的free和C++中的delete
(free和delete直接回收内存 , 当然存储于该内存的对象也就挂了)
Python都是引用,垃圾回收为GC机制'''
'''if __name__ == '__main__':
推荐阅读
- 怎么设置手机为虚拟机使用,手机虚拟机使用教程
- 安卓系统没找到数据迁移,安卓转到ios总是找不到ios
- 华为鸿蒙系统完整包升级,华为鸿蒙系统升级版本
- 不玩手机app安卓,不玩手机app安全吗
- python当前时间函数的简单介绍
- 蒙牛sap登陆,蒙牛登录系统
- 电视看2分钟黑屏怎么办,电视看2分钟就黑屏
- 飞行之旅游戏下载,飞行之旅的意思
- c语言fabs函数用法闼 c++fabs函数怎么用