直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
#!/usr/bin/python
# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
函数传参属于直接赋值
def fun(x)
print(x)
x[0]=2
print(x)
a = [1, 1]
print(a)
fun(a)
print(a)
函数内修改参数,发现函数外的a也会变,说明python传参是赋值,不是拷贝
要保护函数外的变量,函数内加一句
def fun(x)
print(x)
x=x.copy()
x[0]=2
print(x)
本文探讨了Python中对象赋值、浅拷贝和深拷贝的区别,以及函数参数传递的影响。通过实例展示了如何使用copy模块进行深拷贝,并解释了为何在函数内部修改参数会直接影响到外部变量。同时,提到了保护函数外部变量的方法。
1261

被折叠的 条评论
为什么被折叠?



