码迷,mamicode.com
首页 > 编程语言 > 详细

python(6)——循环删除list、深拷贝和浅拷贝

时间:2018-09-10 20:35:00      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:管理功能   print   深拷贝   move   另一个   import   div   目的   也会   

   列表的内存自动管理功能,在删除列表中的元素时,python会自动对列表内存进行收缩,并移动列表中的元素以保证元素之间没有间隙,所以使用

      “循环+remove()方法”来删除列表中元素时会出现元素错位

#删除list1中的奇数
ist1=[1,1,1,2,3,4,5]

for i in list1:
    if i%2!=0:
        list1.remove(i)
print(list1)    #[1,2,4]
若要正确循环删list中的元素,定义两个相同的list。一个list用于循环,从另一个list中删除
import  copy
list1=[1,1,1,2,3,4,5]
list2=[1,1,1,2,3,4,5]

for i in list2:
    if i%2!=0:
        list1.remove(i)

print(list1)   #[2,4]

浅拷贝

#list2=list1 相当于 list2=list1.copy(),都是浅拷贝
#list2和list1指向同一个内存地址,所以list1变了,list2也会变 ;同样不能达到正确删除list1中奇数的目的

list1=[1,1,1,2,3,4,5]
list2=list1             #浅拷贝   相当于 list1.copy()
print(id(list1))     # 2270067237960   id()取内存地址
print(id(list2))     # 2270067237960

for i in list2:
    if i%2!=0:
        list1.remove(i)
print(list1)        #[1,2,4]

深拷贝

# list2=copy.deepcopy(list1)   深拷贝,list1和list2指向不同的内存地址

import  copy   #导入copy模块
list1=[1,1,1,2,3,4,5]
list2=copy.deepcopy(list1)  #深拷贝
print(id(list1))     #2085723515720  id()取内存地址
print(id(list2))     #2085723513928
for i in list2:
    if i%2!=0:
        list1.remove(i)
print(list1)      #[2,4]

 

字符串的值是不能改变的,所以字符串和list情况不同

1 a=cat     #a中保存的是cat的内存地址
2 b = a       #将a中保存的内存地址赋给b,a和b指向同一块内存地址
3 a=dog    #字符串的值是不能改变的,所以重新对a赋值会在分配一块内存给dog,a指向dog的内存地址
4 print(a)    #dog
5 print(b)    #ca

 

python(6)——循环删除list、深拷贝和浅拷贝

标签:管理功能   print   深拷贝   move   另一个   import   div   目的   也会   

原文地址:https://www.cnblogs.com/HathawayLee/p/9622526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!