python記憶體分配機制
python中數值型別是不可變物件,當程式試圖改變資料的值時,程式會重新生成新的資料,而不是改變原來的資料。
python函式的引數都是物件的引用,如果在引用不可變物件時嘗試修改物件,程式會在函式中生成新的物件(開闢新的地址空間),函式外被引用的物件則不會被改變。
num=1
def add(num):
num+=1
print(num)
//1
如果想改變num的值,可以通過函式返回值來實現
L = [1, 2]
def add(list):
list.append(3)
add(L)
print(L)
//[1, 2, 3]
這裡因為函式的引數是引用
深複製和淺複製
1.copy.copy,僅僅複製父物件
2.copy.deepcopy,複製父物件和子物件
import copy
list1=[1,2,['a','b']]
list2=list1
list3=copy.copy(list1)
list4=copy.deepcopy(list1)
list1.append(3)
list1[2].append('c')
print(list1,'\n',list2,'\n',list3,'\n',list4)
# [1, 2, ['a', 'b', 'c'], 3]
# [1, 2, ['a', 'b', 'c'], 3]
# [1, 2, ['a', 'b', 'c']]
# [1, 2, ['a', 'b']]