前生篇:参数的传递_传递可变对象_传递不可变对象
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。
代码演示:
# 测试浅拷贝和深拷贝
import copy
def testCopy():
'''测试浅拷贝'''
a = [10,20,[5,6]]
b = copy.copy(a)
print('a',a)
print('b',b)
b.append(30)
b[2].append(7)
print("浅拷贝······")
print('a',a)
print('b',b)
def testDeepCopy():
'''测试深拷贝'''
a = [10, 20, [5, 6]]
b = copy.deepcopy(a)
print('a',a)
print('b',b)
b.append(30)
b[2].append(7)
print("深拷贝......")
print('a', a)
print('b', b)
testCopy()
print('$'*30)
testDeepCopy()
-----------------------------
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
浅拷贝······
a [10, 20, [5, 6, 7]]
b [10, 20, [5, 6, 7], 30]
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
深拷贝......
a [10, 20, [5, 6]]
b [10, 20, [5, 6, 7], 30]
代码演示:
# 传递不可变对象时。不可变对象里面包含的子对象是可变的。
# 则方法内修改了这个可变对象,源对象也发生了改变。
a = (10,20,[5,6])
print('a', id(a))
def test(m):
print('m',id(m))
m[2][0] = 4
print(m)
print('m',id(m))
test(a)
print(a)
--------------------------------
a 2437333599360
m 2437333599360
(10, 20, [4, 6])
m 2437333599360
(10, 20, [4, 6])
以上帮各位总结好了,收藏,关注即可查收。
前生篇:参数的传递_传递可变对象_传递不可变对象
关注下方公众号,免费拿Python学习资料!!!