当前位置: 首页 > news >正文

网站建设商业计划书网站提交百度收录

网站建设商业计划书,网站提交百度收录,手机网站建设制作教程视频教程,腾讯风铃做的网站有期限吗在python中,给一个对象赋值,实际上就是对象对内存空间存储的值的引用。当我们把对象赋值给另一个变量的时候,这个变量并没有拷贝这个对象,而只是拷贝了这个对象的引用而已。一般情况下我们会通过三种方法来实现拷贝对象的引用。Py…

在python中,给一个对象赋值,实际上就是对象对内存空间存储的值的引用。当我们把对象赋值给另一个变量的时候,这个变量并没有拷贝这个对象,而只是拷贝了这个对象的引用而已。

一般情况下我们会通过三种方法来实现拷贝对象的引用。

Python直接赋值

直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的变量也会做相同的改变。其实就是对‘对象'的引用

示例:

>>> list_demo = [2, 4, 6]

>>> a = list_demo

>>> print(a)

[2, 4, 6]

>>> id(list_demo)

65006808

>>> id(a)

65006808

>>> list_demo.append(8)

>>> print(list_demo)

[2, 4, 6, 8]

>>> print(a)

[2, 4, 6, 8]

>>> id(list_demo)

65006808

>>> id(a)

65006808

>>>

通过 id() 函数我们可以得出,变量 list_demo 与 a 指向的都是同一个内存空间地址,当被赋值的 list_demo改变,被赋值的 a 同样会做相同的改变。这种现象普遍存在于 Python 之中,这种赋值的方式实现了 “假装” 拷贝,真实的情况还是两个变量和同一个对象之间的引用关系。

Python浅拷贝

import copy 模块的 copy.copy() 方法,该方法只拷贝父对象,没有拷贝子对象。且浅拷贝是创建一块新的内存空间,但是内存空间内的元素的地址均是父对象元素的地址的拷贝。所以当父对象内部的子对象发生改变时,拷贝对象的内部的子对象也会跟着改变。

示例:

>>> list_demo1 = [2, 4, 6, [8, 10]]

>>> a = list_demo1

>>> print(list_demo1)

[2, 4, 6, [8, 10]]

>>> print(a)

[2, 4, 6, [8, 10]]

>>>

>>>

>>> import copy

>>> b = copy.copy(list_demo1)

>>> id(list_demo1)

65103472

>>> id(b)

6011200

>>> list_demo1.append(12)

>>> print(list_demo1)

[2, 4, 6, [8, 10], 12]

>>> list_demo1[3]

[8, 10]

>>>

>>>

>>>

>>> list_demo1[3].append('hello')

>>> print(list_demo1)

[2, 4, 6, [8, 10, 'hello'], 12]

>>> print(b)

[2, 4, 6, [8, 10, 'hello']]

>>> list_demo1[3]

[8, 10, 'hello']

>>> b[3]

[8, 10, 'hello']

>>>

>>>

>>>

>>> id(list_demo1)

65103472

>>> id(b)

6011200

>>> id(list_demo1[3])

64679128

>>> id(b[3])

64679128

>>>

从上述代码可以看出,在执行浅拷贝的时候,浅拷贝实际上只拷贝引用,不拷贝内容。同时,浅拷贝会针对父对象的子对象进行判断,当父对象的子对象发生改变时,拷贝对象内的子对象同时也跟着改变。

Python深拷贝

import copy 模块的 copy.deepcopy() 方法,深拷贝与浅拷贝相反,就是彻彻底底的拷贝,完全的拷贝了父对象及子对象,同时指向一个新的内存空间地址。此时,虽然源对象与拷贝对象的内容是一样的,但是不管针对谁进行改动,另一个是丝毫不会受到影响的。

>>> list_demo2 = [2,3,4]

>>> c= copy.deepcopy(list_demo2)

>>> print(list_demo2)

[2, 3, 4]

>>> print(c)

[2, 3, 4]

>>> id(list_demo2)

6011440

>>> id(c)

6012440

>>> list_demo2.append(['a','b'])

>>> c.append([5,6])

>>> print(list_demo2)

[2, 3, 4, ['a', 'b']]

>>> print(c)

[2, 3, 4, [5, 6]]

>>> list_demo2[3].append('c')

>>> c[3].append(7)

>>> print(list_demo2)

[2, 3, 4, ['a', 'b', 'c']]

>>> print(c)

[2, 3, 4, [5, 6, 7]]

>>>

从上述代码示例可以看出 list_demo2 与 c 相互独立,无论 list_demo2 与 c本身进行了修改,或者各自的子对象进行了修改 都没有互相影响。

总结

Python赋值

赋值的本质就是将一个对象的内存空间地址赋值给一个变量,让变量指向该内存空间地址。

Python浅拷贝

浅拷贝是拷贝了源对象的引用,并创建了一个新的内存空间地址。但是引用的对象的子对象的地址仍然是源对象的,所以当源对象的子对象发生改变时,拷贝对象内的子对象同时也跟着改变。

Python深拷贝

深拷贝就是彻底的拷贝,完全的拷贝了父对象及子对象,同时指向一个新的内存空间地址。源对象与拷贝对象之间的修改互不影响。

更多关于Python的赋值、深拷贝与浅拷贝的区别文章请查看下面的相关链接

本文标题: Python的赋值、深拷贝与浅拷贝的区别详解

本文地址: http://www.cppcns.com/jiaoben/python/300300.html

http://www.lbrq.cn/news/2575495.html

相关文章:

  • 做网站卖狗挣钱吗杭州网站推广优化
  • 高端网站设计公司有搜索引擎的作用
  • 棋牌游戏网站模板下载安装关键词排名优化易下拉软件
  • wordpress同行者画廊林云seo博客
  • wordpress+调用多媒体绍兴seo优化
  • 做电影网站的资源从哪里换雷神代刷推广网站
  • 超大免费网站空间广东疫情最新资讯
  • 网站搭建软件d怎么做小程序
  • 中英文网站建设方案武汉seo优化服务
  • 金阳建设集团网站全网营销外包
  • 教育行业网站设计化工seo顾问
  • 解析网站东莞网站建设方案外包
  • 网站 动画 怎么做的百度手机助手app下载官网
  • 多人一起做视频网站bt磁力搜索器
  • 公司专业设计网站整合营销是什么
  • 网站开发 用什么框架宁波网站制作优化服务公司
  • 驻马店哪里做网站指数型基金是什么意思
  • 图片存放网站做链接谷歌账号注册入口官网
  • 中国十大网站建设企业整合营销传播的六种方法
  • 政府网站用什么cms旺道网站优化
  • 如何创建一个网络平台seo超级外链发布
  • 武汉网站建站免费关键词排名优化
  • 企业网站哪家做的好陕西网站设计
  • 通辽做网站苹果要做搜索引擎
  • 广州微网站建设市场百度关键词seo推广
  • 简单的个人网站万能优化大师下载
  • 网站建设服务便宜seo相关ppt
  • 物流网站建设规划书自己开网站怎么开
  • 做淘宝客需要建网站吗sem账户托管公司
  • 做网站的公司地址搜索排行榜
  • Java 中的 HashMap.merge() 方法详解
  • 网络安全基础知识【6】
  • webpack面试题及详细答案80题(61-80)
  • Next.js 怎么使用 Chakra UI
  • 设计模式1:创建型模式
  • OPENGLPG第九版学习 - 纹理与帧缓存 part2