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']]

猜你喜欢

转载自blog.csdn.net/cowboysobusy/article/details/80472524