码迷,mamicode.com
首页 > 编程语言 > 详细

Python中的深拷贝和浅拷贝

时间:2017-10-17 20:54:48      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:深拷贝   分享   技术   一个   div   http   内存   bug   image   

   有一次,在帮师兄做题的时候,调一个bug始终没有调通,后来几经波折,终于有了结果。现在将其中的坑,share出来。其实主要是对python中的深拷贝和浅拷贝理解出现了偏差导致的。

 

  Python中自带了一个copy模块,这个模块用来执行深拷贝和浅拷贝。

   浅拷贝:

l1 = [1,2,3,4]
l2 = l1    # l2引用l1, 实际都指向同一个对象
print(l2)
# [1, 2, 3, 4]
l1[0] = 99 # 对l2的操作就是对l1的操作
print(l1)
# [99, 2, 3, 4]
print(l2)
# [99, 2, 3, 4]

######################
from copy import copy
l1 = [1, 2, [3, 4]]  # 对象中包含对象
l2 = copy(l1)
print(l2)
# [1, 2, [3, 4]]
print(l1)
# [1, 2, [3, 4]]
l2[2][0] = 99
print(l1)
# [1, 2, [99, 4]]
print(l2)
# [1, 2, [99, 4]]
l1[1] = 88
print(l1)
# [1, 88, [99, 4]]
print(l2)
# [1, 2, [99, 4]]

              技术分享

   

  深拷贝:

from copy import deepcopy
l1 = [1, 2, 3, 4]
l2 = deepcopy(l1) # l2指向l1一样的新对象
print(l2)
# [1, 2, 3, 4]
l2[0] = 99    # 对l2的操作不会影响到l1
print(l1)
# [1, 2, 3, 4]
print(l2)
# [99, 2, 3, 4]

        技术分享

Python中对list的拷贝:

一:非常奇怪的语法

new_list = old_list[:]

 

二:内建list()函数

new_list = list(old_list)

 

三:copy

这个要比list()慢一点,因为它要找到old_list的类型

import copy
new_list = copy.copy(old_list)

 

四:最慢和最消耗内存的方法,但是有时是必须的

import copy
new_list = copy.deepcopy(old_list)

 

Python中的深拷贝和浅拷贝

标签:深拷贝   分享   技术   一个   div   http   内存   bug   image   

原文地址:http://www.cnblogs.com/brainstorming/p/7657949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!