Python中的賦值及深淺拷貝
賦值
示例
# 賦值
a = ['aa', 'bb', 14, 12]
b = a
print('a:{}\nb:{}'.format(a, b))
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址相同,指向內(nèi)存中同一個(gè)區(qū)域勋颖。
a[0] = 1
print("執(zhí)行了‘a(chǎn)[0] = 1’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # a的值發(fā)生改變,b的值也隨之發(fā)生改變
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址相同,指向內(nèi)存中同一個(gè)區(qū)域耘擂。
b[1] = 2
print("執(zhí)行了‘b[1] = 2’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # b的值發(fā)生改變,a的值也隨之發(fā)生改變
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址相同,指向內(nèi)存中同一個(gè)區(qū)域。
打印
a:['aa', 'bb', 14, 12]
b:['aa', 'bb', 14, 12]
a的內(nèi)存地址:140362409249160
b的內(nèi)存地址:140362409249160
******************執(zhí)行了‘a(chǎn)[0] = 1’后******************
a:[1, 'bb', 14, 12]
b:[1, 'bb', 14, 12]
a的內(nèi)存地址:140362409249160
b的內(nèi)存地址:140362409249160
******************執(zhí)行了‘b[1] = 2’后******************
a:[1, 2, 14, 12]
b:[1, 2, 14, 12]
a的內(nèi)存地址:140362409249160
b的內(nèi)存地址:140362409249160
淺拷貝
示例
# 淺拷貝
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = a.copy() # 淺拷貝
print('a:{}\nb:{}'.format(a, b))
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
b[0] = 'cc'
print("執(zhí)行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 只改變(b[0] = 'cc')最外層列表時(shí),b[0] = 'cc',a[1][0] = 1,a[0]的值無變化
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
b[1][0] = 10
print("執(zhí)行了‘a(chǎn)[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改變(b[1][0] = 10)第二層列表中的值時(shí),b[1][0] = 10,a[1][0] = 10
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
打印
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139809337808456
b的內(nèi)存地址:139809337809160
*****************執(zhí)行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139809337808456
b的內(nèi)存地址:139809337809160
****************執(zhí)行了‘a(chǎn)[1][0] = 10’后****************
a:['aa', [10, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139809337808456
b的內(nèi)存地址:139809337809160
深拷貝
示例
# 深拷貝
import copy
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = copy.deepcopy(a) # 深拷貝
print('a:{}\nb:{}'.format(a, b))
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
b[0] = 'cc'
print("執(zhí)行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改變(b[0] = 'cc')最外層列表時(shí),b[0] = 'cc',a[0] = 'aa',a[0]值無變化
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
b[1][0] = 10
print("執(zhí)行了‘a(chǎn)[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改變(b[1][0] = 10)第二層列表中的值時(shí),b[1][0] = 10,a[1][0] = 1,a[1][0]無變化
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}'.format(id(a), id(b))) # a,b內(nèi)存地址不同
打印
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139961185536008
b的內(nèi)存地址:139961185537288
*****************執(zhí)行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139961185536008
b的內(nèi)存地址:139961185537288
****************執(zhí)行了‘a(chǎn)[1][0] = 10’后****************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:139961185536008
b的內(nèi)存地址:139961185537288
三層列表演示
示例
# 三層列表示例
import copy
a = ['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c = a.copy() # 淺拷貝
b = copy.deepcopy(a) # 深拷貝
print('a:{}\nb:{}\nc:{}'.format(a, b, c))
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}\nc的內(nèi)存地址:{}'.format(id(a), id(b), id(c))) # a,b,c內(nèi)存地址不同
a[1][0][1] = '啦啦啦'
print("執(zhí)行了a[1][0][1]='啦啦啦'后".center(50, '*'))
print('a:{}\nb:{}\nc:{}'.format(a, b, c)) # c淺拷貝的值隨著a的改變而發(fā)生變化,b深拷貝的值無變化.
print('a的內(nèi)存地址:{}\nb的內(nèi)存地址:{}\nc的內(nèi)存地址:{}'.format(id(a), id(b), id(c))) # a,b,c內(nèi)存地址不同
打印
a:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:140291239103560
b的內(nèi)存地址:140291239103432
c的內(nèi)存地址:140291239103496
***************執(zhí)行了a[1][0][1]='啦啦啦'后***************
a:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
a的內(nèi)存地址:140291239103560
b的內(nèi)存地址:140291239103432
c的內(nèi)存地址:140291239103496