深浅拷贝

本文详细解释了Python中浅拷贝与深拷贝的区别,并通过实例演示了它们如何作用于不同数据类型,如字符串、数字、字典、元组及列表等。

1. 对于字符串和数字而言,赋值与深浅拷贝无意义,因为其内存永远指向同一地址

  1.赋值:

  >>>n1 = 123
  >>>n2 = n1
  >>>id(n1),id(n2)
  (1485790864, 1485790864)

  2.浅拷贝:

  >>>import copy
  >>>n1 = 123
  >>>n2 = copy.copy(n1)
  >>>id(n1),id(n2)
  >>>(1485790864, 1485790864)

  3.深拷贝:

  >>>import copy
  >>>n1 = 123
  >>>n2 = copy.deepcopy(n1)
  >>>id(n1),id(n2)
  >>>(1485790864, 1485790864)

 

2. 其他基本数据类型:

  对于字典,元组,列表而言,进行赋值,深浅拷贝的时候,其内存地址是不同的

  1. 赋值:只是创建一个变量,该变量指向原来的地址

  >>>import copy
  >>>n1 = {'k1':'w123','k2':123,'k3':['alxe',456]}
  >>>n2 = n1
  >>>id(n1),id(n2)
  (47806480, 47806480)

 

  

  2.浅拷贝:在内存中只额外拷贝第一层数据

  >>>n1 = {'k1':'w123','k2':123,'k3':['alxe',456]}
  >>>n2 = copy.copy(n1)
  >>>id(n1),id(n2)
  (47805184, 47805472)
  >>>id(n1[k1]),id(n2[k1])
  (48424320, 48424320)

   

  3.深拷贝:在内存中将所有的数据都拷贝一份,最后一层除外(因为python对字符串和数字进行了内部优化)

  >>>import copy
  >>>n1 = {'k1':'w123','k2':123,'k3':['alxe',456]}
  >>>n2 = copy.deepcopy(n1)
  >>>id(n1),id(n2)
  (47867920, 48790000)
  >>>id(n1['k1']),id(n2['k1'])
  (48490560, 48490560)
  >>>id(n1['k3']),id(n2['k3'])
  (47353408, 48495352)

 

 

   

 

转载于:https://www.cnblogs.com/houdun/p/7112931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值