Python实战:Python的赋值,深拷贝,浅拷贝

目录

1. 赋值

2. 浅拷贝

3. 深拷贝

4. 总结


在Python中,赋值、深拷贝和浅拷贝是非常常见的操作。它们之间的区别和联系对于Python程序员来说是非常重要的。下面我们将详细分析和总结Python的赋值、深拷贝和浅拷贝。

1. 赋值

在Python中,赋值是将一个对象的引用赋值给一个变量。例如:

from inner_datastruct import WEIXIN_URL

# 赋值  在Python中,赋值是将一个对象的引用赋值给一个变量
a = [1, 2, 3]
b = a
print(a, b) # [1, 2, 3] [1, 2, 3]
print(id(a), id(b)) # 1778558541376 1778558541376
a.append(WEIXIN_URL)
print(a, b) # [1, 2, 3, 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q'] [1, 2, 3, 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q']

在上面的代码中,变量a和变量b都指向了同一个列表对象[1, 2, 3]。因此,对变量a或变量b进行修改,都会影响到同一个列表对象。

2. 浅拷贝

浅拷贝是指创建一个新的对象,但是该对象的元素是原始对象的引用。例如:

# 浅拷贝
a = [1, 2, [3, 4]]
b = a.copy()
a[2][0] = 0x23 # 修改a中的列表元素
a.append(1234) # 添加元素不影响浅拷贝
a[0]=111  # 修改列表(非里面的列表元素)元素不影响浅拷贝
print(a, b)  # [111, 2, [35, 4], 1234] [1, 2, [35, 4]]
print(id(a), id(b)) # 2806160065856 2806160061120

在上面的代码中,变量b是变量a的浅拷贝。当我们修改变量a中的列表元素时,变量b中的相应元素也会发生变化。例如:

a[2][0] = 5

print(b)  # 输出:[1, 2, [5, 4]]

在上面的代码中,我们修改了变量a中的列表元素[3, 4]中的第一个元素,结果变量b中的相应元素也发生了变化。

3. 深拷贝

深拷贝是指创建一个新的对象,并且该对象的元素也是新的对象。例如:

# 深拷贝
import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print(a, b)  # [1, 2, [3, 4]] [1, 2, [3, 4]]
print(id(a), id(b)) # 2501078710976 2501078674560

a[2][0] = 1234567
a[0] = WEIXIN_URL
# 深拷贝,改变变量a,不影响变量b
print(a, b) # ['https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q', 2, [1234567, 4]] [1, 2, [3, 4]]

在上面的代码中,变量b是变量a的深拷贝。当我们修改变量a中的列表元素时,变量b中的相应元素不会发生变化。例如:

a[2][0] = 5

print(b)  # 输出:[1, 2, [3, 4]]

在上面的代码中,我们修改了变量a中的列表元素[3, 4]中的第一个元素,但是变量b中的相应元素没有发生变化。

4. 总结

在Python中,赋值、浅拷贝和深拷贝都是非常常见的操作。它们之间的区别和联系可以总结如下:

- 赋值是将一个对象的引用赋值给一个变量,变量和原始对象指向同一个内存地址。

- 浅拷贝是创建一个新的对象,但是该对象的元素是原始对象的引用,新对象和原始对象的元素指向不同的内存地址,但是元素中的引用指向同一个内存地址。

- 深拷贝是创建一个新的对象,并且该对象的元素也是新的对象,新对象和原始对象的元素指向不同的内存地址,元素中的引用也指向不同的内存地址。

因此,在实际编程中,我们需要根据具体情况选择合适的方法来进行对象的复制和修改。


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值