快捷搜索:  汽车  科技

python面试基础知识问题(python常见面试题04深浅拷贝)

python面试基础知识问题(python常见面试题04深浅拷贝)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ @file: interview04.py @time: 2022/8/28 22:05 @desc: """ import copy """ 浅拷贝大白话就是浅一点的拷贝,深拷贝就是深一点的拷贝,不过这个和拷贝对象的数据层次 也有一定的关系,如果数据结构本身就是一层的,例如字符串、数字,只有一层的列表和字典 那么此时深浅拷贝的意义是一样的,只有对于多层的数据,深浅拷贝的不同之处才能体现出来 """ # 浅拷贝 m = {"key1": ['value1' 'value2']} n = copy.copy(m) # 查看一下m、n的内存地址,发现m、n的内存地址是不同的,说明 # 在进行浅拷贝的时候n还是开辟出了一块新的内 存 print(id(m)) print(id(n))

python面试基础知识问题(python常见面试题04深浅拷贝)(1)

print('==============================================') # 接下来看一下嵌套在m、n中的数据是什么情况,在本例中是一个list print(id(m['key1'])) print(id(n['key1']))

python面试基础知识问题(python常见面试题04深浅拷贝)(2)

print('==============================================') # 输出结果发现m、n子对象的内存地址是一样的,说明浅拷贝的时候是原来 # 子对象的引用而已,两者是会同步变化的 # 我们来验证一下,给子对象追加一个元素看看 m['key1'].append('value3') print(m) print(n)

python面试基础知识问题(python常见面试题04深浅拷贝)(3)

# 测试结果发现,m中的子对象值追加了,那么n同步发生改变了,这种拷贝在数据量 # 大的时候会节省很多内存,可见浅拷贝还是很有意义的 print('==============================================') # 深拷贝 # 同样的我们来研究一下深拷贝,就会发现两者之间的区别了 m = {"key1": ['value1' 'value2']} n = copy.deepcopy(m) # 查看一下m、n的内存地址,发现m、n的内存地址是不同的,说明 # 在进行深拷贝的时候n开辟出了一块新的内存 print(id(m)) print(id(n))

python面试基础知识问题(python常见面试题04深浅拷贝)(4)

print('==============================================') # # 接下来看一下嵌套在m、n中的数据是什么情况,在本例中是一个list print(id(m['key1'])) print(id(n['key1']))

python面试基础知识问题(python常见面试题04深浅拷贝)(5)

print('==============================================') # 输出结果发现m、n子对象的内存地址是不一样的,说明深拷贝的时候 # 会创建新的对象,两者是不会同步变化的 # 我们来验证一下,给子对象追加一个元素看看 m['key1'].append('value3') print(m) print(n)

python面试基础知识问题(python常见面试题04深浅拷贝)(6)

# m新加了value3,n中没有同步变化,说明两者确实是没有关系的,互不影响的 # 不过由此就可以看出深拷贝的问题,如果有大量数据的时候深拷贝会要求有很多的内存 # 要注意内存大小的问题了

猜您喜欢: