Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况

Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况


文章目录

  • Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况
  • 前言
  • 一、浅拷贝和深拷贝
  • 二、传递不可变对象包含的子对象是可变的情况
  • 总结

前生篇:参数的传递_传递可变对象_传递不可变对象


前言

Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况_第1张图片


一、浅拷贝和深拷贝

  • 为了更深入的了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。

浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。

代码演示:

# 测试浅拷贝和深拷贝

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]

Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况_第2张图片

二、传递不可变对象包含的子对象是可变的情况

代码演示:

# 传递不可变对象时。不可变对象里面包含的子对象是可变的。
# 则方法内修改了这个可变对象,源对象也发生了改变。

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学习资料!!!

Python入门基础篇 No.57 —— 浅拷贝和深拷贝_传递不可变对象包含的子对象是可变的情况_第3张图片

你可能感兴趣的:(#,基础,python,编程语言,经验分享,程序人生,windows)