深浅拷贝

2018-10-26 05:29:25来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、=

  • 没有产生新对象,都是内存地址的赋值
lst1 = [11, 22, 33, 44]
lst2 = lst1

print(id(lst1)) # 1916361712712
print(id(lst2)) # 1916361712712 lst1.append(
"hello") print(lst1) # [11, 22, 33, 44, 'hello'] print(lst2) # [11, 22, 33, 44, 'hello']
dic1 = {"name": "Tom", "age": 18}
dic2 = dic1

print(id(dic1)) # 2020711820888
print(id(dic2)) # 2020711820888
dic1[
"hobby"] = "football" print(dic1) # {'name': 'Tom', 'age': 18, 'hobby': 'football'} print(dic2) # {'name': 'Tom', 'age': 18, 'hobby': 'football'}

    对于list,set,dict来说,变量1 = 变量2,其实就相当于把变量2内容的内存地址交给变量1,并不是复制一份内容,所以一变,都变。 

二、浅拷贝

  • 优点:省内存
  • 缺点:只拷贝第一层内容
  • 浅拷贝方法:copy(),对于list,还有lst[:]
lst1 = [11, 22, 33]
lst2 = lst1[:]

print(id(lst1))  # 1744651035720
print(id(lst2))  # 1744651035848

lst1.append(44)

print(lst1) # [11, 22, 33, 44]
print(lst2) # [11, 22, 33]
lst1 = [11, 22, 33, [44, 55]]
lst2 = lst1.copy()

print(id(lst1))  # 2081315824712
print(id(lst2))  # 2081316649864

lst1[3].append("hello")

print(lst1) # [11, 22, 33, [44, 55, 'hello']]
print(lst2) # [11, 22, 33, [44, 55, 'hello']]

 


 

三、深拷贝

  • 深拷贝把内部元素完全进行拷贝复制。

    深拷贝方法:

import copy

s2 = copy.deepcopy(s1)

 

 

import copy

lst1 = [11, 22, 33, [44, 55]]
lst2 = copy.deepcopy(lst1)

print(id(lst1))  # 1236356428872
print(id(lst2))  # 1236356430152

lst1[3].append("hello")

print(lst1) # [11, 22, 33, [44, 55, 'hello']]
print(lst2) # [11, 22, 33, [44, 55]]

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python全栈学习_day003知识点

下一篇:Python自学知识点----Day01