最近在写项目中使用到del函数和remove函数,出现了一些常识性但又容易忘记的错误,在这里记录一些,也是给自己提醒一下。
首先,del和remove的区别,很好理解。
del:利用del[索引数] 函数删除指定索引数的元素 或删除整个变量
remove:用remove()方法删除指定元素
但是两者之间也是有共存点的,先看一下例子。
#对使用del
x=[1,2,3,5,2]
y=x #将x赋给y
del y[2]
print('del删除后对应输出y:',y)
print('输出x:',x)
对使用remove
x=[1,2,3,5,2]
y=x #将x赋给y
y.remove(2)
print('remove删除后对应输出y:',y)
print('输出x:',x)
结果是:
del删除后对应输出y: [1, 3, 5, 2]
输出x: [1, 3, 5, 2]
remove删除后对应输出y:[1, 3, 5, 2]
输出x: [1, 3, 5, 2]
两个结果是一样,对del和remove的结果当然是一样的,但是x也变了,这个就是引用删除,个人理解是del和remove删除了内存里对应的值,因此所有的引用里的值也都改变了。再看一个例子。
#del例子
def app_del(a):
b=a
del b[1]
return b
if __name__=='__main__':
a=[1,2,3,5,2]
c=app_del(a)
print('a的值',a)
print('del对应c的值',c)
#remove例子
def app_remove(a,i):
b=a
b.remove(i)
return b
if __name__=='__main__':
a=[1,2,3,5,2]
c=app_remove(a,2)
print('a的值',a)
print('remove对应c的值',c)
输出结果为:
a的值 [1, 3, 5, 2]
del对应c的值 [1, 3, 5, 2]
a的值 [1, 3, 5, 2]
remove对应c的值 [1, 3, 5, 2]
可以发现就是在函数中,使用了del和remove同样也会删除了内存中对应的变量。
而在开发中往往想删除引用中的量,如果留意这个简单的问题,会给自己带来不小的麻烦,会一直报错,哎·····,自己就是啊,找了半天的错误,所以在使用之前一定要考虑要不要保留一份,如果对后面的开发没有影响,那就没有问题,如果有影响,个人建议最好保存一份,使用copy函数,如
def app_del(a):
b=a
del b[1]
return b
if __name__=='__main__':
a=[1,2,3,5,2]
b=a.copy()
c=app_del(a)
print('a的值',a)
print('b的值',b)
print('c的值',c)
输出结果:
a的值 [1, 3, 5, 2]
b的值 [1, 2, 3, 5, 2]
c的值 [1, 3, 5, 2]
OK了,remove也是相同的,以后在写代码的时候要注意点了,所以啊基础知识很重要啊。