python基礎資料型別:深淺(copy)___007
阿新 • • 發佈:2018-12-25
1、賦值運算(賦值是同一個記憶體地址)
(1)列表
例子:
li = [1,2,3]
li1 = li
li.append('barry')
print(li,id(li)) # [1, 2, 3, 'barry'] 4874824
print(li1,id(li1)) # [1, 2, 3, 'barry'] 4874824
(2)字典
例子:
dic1 = { "name":"江河", "age":18, "heigh":180 } dic2 = dic1 dic1.setdefault('address','北京') print(dic1,id(dic1)) # {'name': '江河', 'age': 18, 'heigh': 180, 'address': '北京'} 30834192 print(dic2,id(dic2)) # {'name': '江河', 'age': 18, 'heigh': 180, 'address': '北京'} 30834192
如圖:
(3)字串
例子:
s = 'alex'
s1 = s
s = s.replace('a','A')
s1 = s.replace('e','E')
print(s,id(s)) # Alex 36902536
print(s1,id(s1)) # AlEx 36932888
2、深淺(copy)
(1)淺copy:對於淺copy來說,第一層建立的是新的記憶體地址,而從第二層開始,指向的是同一個記憶體地址,對於第二層以及
更深層次來說,保持一致性
例子:淺copy()和賦值不一樣
淺copy()列表、字典都一樣,以list列表為例
例子1:
li = [1,2,3]
li1 = li.copy() # id記憶體地址不一樣,建立一個新的記憶體空間
li.append('新增')
print(li,id(li)) # [1, 2, 3, '新增'] 30302792
print(li1,id(li1)) # [1, 2, 3] 30302856
例子2:
巢狀(第二層記憶體地址一致) :整體的記憶體地址不一樣,巢狀的記憶體地址一樣
li1 = [1,2,3,[33,44,55],4,5,6] li2 = li1.copy() li1.append(66) print(li1,id(li1),li1[3],id(li1[3])) # [1, 2, 3, [33, 44, 55], 4, 5, 6, 66] 4874888 [33, 44, 55] 4874824 print(li2,id(li2),li2[3],id(li2[3])) # [1, 2, 3, [33, 44, 55], 4, 5, 6] 31132616 [33, 44, 55] 4874824
(2)深copy():對於深copy()來說,兩個是完全獨立,改變任意一個元素(無論多少層),另一個記憶體地址絕對不會改變
例子:
import copy
li1 = [1,2,3,[33,44,55],4,5,6]
li2 = copy.deepcopy(li1)
# 改變第一層
li1.append(15)
print(li1,id(li1),li1[3],id(li1[3]))
# [1, 2, 3, [33, 44, 55], 4, 5, 6, 15] 35468808 [33, 44, 55] 35470024
print(li2,id(li2),li2[3],id(li2[3]))
# [1, 2, 3, [33, 44, 55], 4, 5, 6] 35613896 [33, 44, 55] 35613960
# 改變第二層
li1[3].append(66)
print(li1,id(li1),li1[3],id(li1[3]))
# [1, 2, 3, [33, 44, 55, 66], 4, 5, 6, 15] 35468808 [33, 44, 55, 66] 35470024
print(li2,id(li2),li2[3],id(li2[3]))
# [1, 2, 3, [33, 44, 55], 4, 5, 6] 35613896 [33, 44, 55] 35613960
3、enumerate() :用於將一個可遍歷的資料物件(如:列表、字串或元組)組合成為一個索引序列,同時列出資料和資料下標,一般用在for迴圈中
enumerate(sequence,[start=0])
sequence---一個序列可迭代的物件,start----下標起始位置
例子
li = ['alex','taibai','wusir','egon']
for i in li:
print(li.index(i),i)
for index ,i in enumerate(li,2):
print(index,i)