1. 程式人生 > >python-深淺copy-18

python-深淺copy-18

可能 運算 說明 deep for in += item var 獲得


# 賦值運算
l1 = [1,2,3]
l2 = l1
l1.append(‘a‘)
print(l1,l2) # [1, 2, 3, ‘a‘] [1, 2, 3, ‘a‘]

#copy
l1 = [1,2,3]
l2 = l1.copy()
print(l1,l2) # [1, 2, 3] [1, 2, 3]
print(id(l1),id(l2)) # 36772744 36771976
l2.append(‘a‘)
print(l1,l2) # [1, 2, 3] [1, 2, 3, ‘a‘]

l1 = [1,2,[4,5,6],3]
l2 = l1.copy()

print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 36773832
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 36772744
l1.append(‘a‘)
print(l1,l2) # [1, 2, [4, 5, 6], 3, ‘a‘] [1, 2, [4, 5, 6], 3]
l1[2].append(‘a‘)
print(l1,l2) # [1, 2, [4, 5, 6, ‘a‘], 3, ‘a‘] [1, 2, [4, 5, 6, ‘a‘], 3]
print(id(l1[2])) # 30302792
print(id(l2[2])) # 30302792

import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 37541960
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 36773832
l1[2].append(‘a‘)
print(l1,l2) # [1, 2, [4, 5, 6, ‘a‘], 3] [1, 2, [4, 5, 6], 3]

‘‘‘
淺拷貝,只拷貝了列表的第一層,所以第一層的id會不同,但是從第二層甚至更深的層次,id就都是一樣的了,
id(var)函數可以查看內存地址,因此copy()列表第一層是各自獨立的,但是從第二層開始就開始相關聯。
真正要實現深度拷貝,必須要用copy.deepcopy()。
總結:淺拷貝,即只有第一層是各自獨立的。
深拷貝,所有層都是相互獨立的。
‘‘‘

l1 = [1,[1],2,3,4]
l2 = l1[:]
l1[1].append(‘a‘)



#l2 的結果是什麽?

print(l1,id(l1)) # [1, [1, ‘a‘], 2, 3, 4] 30302792
print(l2,id(l2)) # [1, [1, ‘a‘], 2, 3, 4] 37541960
print(l1[1] is l2[1]) # True

li = [‘alex‘,‘taibai‘,‘wusir‘,‘egon‘]
for i in li:
print(li.index(i),i)

for index,i in enumerate(li,1):
print(index,i)


‘‘‘
enumerate()說明
enumerate()是python的內置函數
enumerate在字典上是枚舉、列舉的意思
對於一個可叠代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用於在for循環中得到計數
例如對於一個seq,得到:
‘‘‘

# (0, seq[0]), (1, seq[1]), (2, seq[2])

# enumerate()返回的是一個enumerate對象,例如:

# enumerate()使用
# 如果對一個列表,既要遍歷索引又要遍歷元素時,首先可以這樣寫:
list1 = ["這", "是", "一個", "測試"]
for i in range (len(list1)):
print(i ,list1[i])

# 上述方法有些累贅,利用enumerate()會更加直接和優美:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1):
print(index, item)

# enumerate還可以接收第二個參數,用於指定索引起始值,如:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1, 1):
print(index, item)

#如果要統計文件的行數,可以這樣寫:

# count = len(open(filepath, ‘r‘).readlines())

#這種方法簡單,但是可能比較慢,當文件比較大時甚至不能工作。

#可以利用enumerate():

# count = 0
# for index, line in enumerate(open(filepath,‘r‘)):
# count += 1




python-深淺copy-18