python(7)——循環刪除list、深拷貝和淺拷貝


   列表的內存自動管理功能,在刪除列表中的元素時,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM