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

 

相关文章:

  • 2021-09-03
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
  • 2021-06-13
猜你喜欢
  • 2021-10-19
  • 2022-12-23
  • 2021-11-09
  • 2021-08-27
  • 2021-12-27
  • 2021-06-14
  • 2021-12-23
相关资源
相似解决方案