变量赋值和修改(在python中)

发布于 2021-01-29 17:31:02

当我运行此脚本(Python v2.6)时:

a = [1,2]
b = a
a.append(3)
print a
>>>> [1,2,3]
print b
>>>> [1,2,3]

我期望print b输出[1,2]。当我所做的只是改变a时,为什么b被改变了?b是否永久绑定到a?如果是这样,我可以使它们独立吗?怎么样?

关注者
0
被浏览
158
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python中的内存管理涉及一个私有堆内存位置,该位置包含所有Python对象和数据结构。

    Python的运行时仅处理对对象的引用(所有对象都驻留在堆中):Python堆栈上的内容始终是对其他位置的值的引用。

    >>> a = [1, 2]
    

    python变量

    >>> b = a
    
    
    
    
    
    
    >>> a.append(3)
    

    python变量

    在这里,我们可以清楚地看到变量b与绑定到同一对象a

    您可以使用is运算符来测试两个对象在物理上是否相同,这意味着它们在内存中是否具有相同的地址。也可以使用id()功能进行测试。

    >>> a is b
    >>> True
    >>> id(a) == id(b)
    >>> True
    

    因此,在这种情况下, 您必须明确要求复制 。完成此操作后,两个不同的列表对象之间将不再有连接。

    >>> b = list(a)
    >>> a is b
    >>> False
    

    python变量



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看