冒泡泡de可乐
代码都是思想和概念的体现~每多学一点知识,就能少写一行代码~

   列表的内存自动管理功能,在删除列表中的元素时,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

 

posted on 2018-09-10 20:17  HathawayLee  阅读(1422)  评论(0编辑  收藏  举报