python列表中的賦值與深淺拷貝

首先建立一個列表函數

a=[[1,2,3],4,5,6]spa

1、賦值內存

a=[[1,2,3],4,5,6]
b=a
a[0][1]='tom'
print(a)
print(b)
結果:

[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]import

a=[[1,2,3],4,5,6]
b=a
b[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
總結:賦值無論是對a列表改變仍是對b列表改變,
只要改變其中一個,另外一個也會跟着變,這是由於a
和b共用一塊內存,沒有建立新的內存,
他們是相同的,他們指向同一個內存區域。

2、淺拷貝 [:]or copy()

a=[[1,2,3],4,5,6]
b=a.copy()
b[0][1]='tom'
print(a)
print(b)
結果: 

    [[1, 'tom', 3], 4, 5, 6]
    [[1, 'tom', 3], 4, 5, 6]im

a=[[1,2,3],4,5,6]
b=a.copy()
a[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]

a=[[1,2,3],4,5,6]
b=a.copy()
b[1]='tom'
print(a)
print(b)
結果:

   [[1, 2, 3], 4, 5, 6]
   [[1, 2, 3], 'tom', 5, 6]總結

a=[[1,2,3],4,5,6]
b=a.copy()
a[1]='tom'
print(a)
print(b)
結果:

   [[1, 2, 3], 'tom', 5, 6]
   [[1, 2, 3], 4, 5, 6]數據

 

總結:從上面代碼能夠看出來淺拷貝是從新開闢一塊內存,拷貝第一層數據,不拷貝內部子元素集合

在本代碼中,b列表從新開闢了一塊內存放元素【b【0】,4,5,6】,也就是第一層內容,copy

而後b【0】的位置指向了a【0】指向的內存位置co

 

3、深拷貝   使用copy函數

 

從新開闢一塊內存,存放拷貝列表的全部內容。a集合與b集合互不影響

import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[1]='tom'
print(a)
print(b)
結果:

  [[1, 2, 3], 'tom', 5, 6]
   [[1, 2, 3], 4, 5, 6]

import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[1]='tom'
print(a)
print(b)
結果:

  [[1, 2, 3], 4, 5, 6]
  [[1, 2, 3], 'tom', 5, 6]

import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[0][1]='tom'
print(a)
print(b)
結果;

  [[1, 2, 3], 4, 5, 6]
  [[1, 'tom', 3], 4, 5, 6]

import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[0][1]='tom'
print(a)
print(b)
結果:

  [[1, 'tom', 3], 4, 5, 6]
   [[1, 2, 3], 4, 5, 6]

copy函數也能夠淺拷貝:

 

import copy
a=[[1,2,3],4,5,6]
b=copy.copy(a)
a[0][1]='tom'
print(a)
print(b)
結果:

   [[1, 'tom', 3], 4, 5, 6]
   [[1, 'tom', 3], 4, 5, 6]

相關文章
相關標籤/搜索