前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【python内存机制】引用和赋值

【python内存机制】引用和赋值

作者头像
py3study
发布2020-01-14 20:07:56
6910
发布2020-01-14 20:07:56
举报
文章被收录于专栏:python3
1 引用和对象
代码语言:javascript
复制
    1.1> 创建变量的过程
            内存创建对象 --> 创建变量 --> 变量引用到对象
            因此:变量只是到内存对象的一个引用
    1.2> 对象组成
            类型标识符(标识对象类型)
            引用计数(是否回收对象)
    1.3> 垃圾回收
            如果对象没有变量引用(引用计数为0),那么会被回收
    1.4> 共享引用:多个变量引用同一个对象
            a = 1
            b = a  // a和b指向的是内存中同一对象

            a = 3
            b = a
            a = 4  //  改变a的值,不会影响a的值(只是单纯的改变引用指向)

    1.5> 共享引用和原处修改 // 主要关注的是可变对象共享引用,需要引入拷贝(深浅拷贝的id都不同)
            *场景1* // list只有一层
            l1 = [1,2,3]
            l2 = l1
            l2[0] = 2 // 此处l1和l2都会改变

            *解决方案*
            l2 =l1[:]  // 浅拷贝 copy.cpoy()也可实现
            l2[0] = 2 // 此处修改l2不会影响l1

            *场景2* // list有多层
            l1 = [1,2,[1,2]]
            l2 = l1[:]
            l2[2][0] = 2 // 此处l2即使拷贝(浅拷贝),l1也会被影响

            *解决方案*
            l2 = copy.deepcopy(l1)
    1.6> 共享引用和相等

            // 先导:python对象包含3个要素 id(身份标识) value(值) type(对象类型)
            // == 判断的是value值  is判断的是id标识

            s1 = 1
            s2 = 1
            s1 is s2 ==> True
            s1 == s2 ==> True  // 小范围整数(-127~256),python不会创建新的对象,1会被a和b复用

            s1 = ‘spam’
            s2 = 'spam'
            s1 is s2 ==> True
            s1 == s2 ==> True // 字符串类似于小整数

            s1 = [1,2,3]
            s2 = [1,2,3]
            s1 == s2 ==> True
            s1 is s2 ==> False // 对于list、tuple、dict、set时,s1 is s2均为False
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 引用和对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档