• Python-共享引用


     A会改变么?

    下面三小段代码,A的值都会改变么?

    >>> A = "spam"
    >>> B = A
    >>> B = "shrubbery"
    >>> A = ["spam"]
    >>> B = A
    >>> B[0] = "shrubbery"
    >>> A = ["spam"]
    >>> B = A[:]
    >>> B[0] = "shrubbery"

     分析:

    “python中一切都是对象”

    整数也好,字符串也罢,都是对象。这里,字符串"spam"、列表["spam"]、字符串"shrubbery"都是对象,而A和B则是这里对象的引用,引用可以理解成对这个对象的地址,或者这个对象的名字。

    对象又分为可变对象和不可变对象:

    • 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
    • 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变

    Python中,数值类型(intfloat)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。


    OK,有了上面的认识,我们就可以撸开袖子分析了。

    工欲善其事,必先利其器。一个函数可以帮我们分析A和B是否引用的同一个对象--id(),id()函数用于获取对象的内存地址

  • 相关阅读:
    Django请求生命周期
    继上一篇Django的数据库数据的编辑和删除
    NumPy-布尔索引
    NumPy-基础索引与切片
    NumPy-数组算术
    NumPy-ndarray 的数据类型
    NumPy-生成ndarray
    Django 静态资源,请求,数据库的连接和操作
    设置谷歌默认浏览器
    奋斗史-IT女生是怎样炼成的
  • 原文地址:https://www.cnblogs.com/ralap7/p/8955122.html
Copyright © 2020-2023  润新知