变量赋值与修改(在python中)[重复]

2025-02-25 09:07:00
admin
原创
19
摘要:问题描述:当我运行此脚本(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,而 ...

问题描述:

当我运行此脚本(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?如果是,我可以将它们独立吗?怎么做?


解决方案 1:

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

Python 的运行时仅处理对对象(所有对象都位于堆中)的引用:Python 堆栈中发生的始终是对位于其他地方的值的引用。

>>> a = [1, 2]

python 变量

>>> b = a

python 变量

>>> 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 变量

解决方案 2:

Python 中的对象是通过引用存储的——您不是将的值分配a给,而是将指向b该对象的指针分配给。a

为了模拟按值赋值,您可以像这样进行复制:

import copy

b = copy.copy(a)

# now the code works as "expected"

请注意这会带来性能方面的缺点。

对于数组来说,有一种依赖于切片的特殊方法:

b = a[:]

# code also works as expected here

更新- 除此之外,对于某些对象,您可以使用构造函数 - 其中包括列表:

b = list(a)

解决方案 3:

简短的回答——指针。

当您输入时,b = a它设置b为查看相同的数组a。您必须创建一个新数组,其中包含元素的副本以将它们分开。在这种情况下,类似的东西b = [n for n in a]就可以正常工作。对于更复杂的操作,您可能需要查看http://docs.python.org/library/copy.html

解决方案 4:

您可能需要查看此链接。您在这里遇到的问题是a两者b都指向相同的内存位置,因此更改其中一个会更改另一个。相反,您需要执行以下操作:

a = [1,2]
b = list(a)

解决方案 5:

a是指向列表的指针[1,2]

当您进行分配时,b = ab 的值是列表的地址[1,2]

因此,当您这样做时,您a.append(3)实际上并没有改变,而是改变了指向a的列表。由于和都指向同一个列表,因此当您修改另一个时,它们似乎都会发生变化。a`a`b

解决方案 6:

如果你只是想将列表 a 的内容复制到 b,而不是将 b 指针指向 a:

b = a[:]

使用切片运算符将把列表的内容复制到 b 中,这样您的示例将变成:

a = [1,2]
b = a[:]
a.append(3)
print a
>>>> [1,2,3]
print b
>>>> [1,2]
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1343  
  信创产业的蓬勃发展推动着各行业数字化转型加速,数据库迁移作为其中关键一环,面临诸多挑战。信创数据库迁移旨在将传统数据库平稳过渡到信创环境,以满足自主可控、安全可靠的需求。这一过程涉及技术、业务等多方面因素,稍有不慎就可能出现各种问题,影响业务的正常运行。深入探讨信创数据库迁移过程中的常见问题及解决方案,对于保障迁移工作...
2027年信创国产化   41  
  随着信息技术的飞速发展,信创国产化成为了国家战略的重要组成部分。国产化信创产品名录涵盖了众多领域,其在各个关键应用场景中发挥着重要作用。而信创国产化操作系统作为其中的核心环节,具备五大核心优势,为我国信息技术产业的自主可控发展提供了坚实支撑。关键应用场景之办公领域在办公领域,国产化信创产品有着广泛且深入的应用。如今,越...
国产信创系统   37  
  随着信息技术的飞速发展,信创国产化操作系统在政府部门的推广应用具有重要的战略意义。它不仅关乎国家信息安全,更是推动国内信息技术产业自主创新、实现科技自立自强的关键举措。在当前复杂的国际形势下,政府部门积极推广信创国产化操作系统,对于保障国家政务信息的安全稳定运行,提升信息技术的自主可控能力,具有不可替代的重要作用。推广...
信创产品有哪些   28  
  在企业数字化转型的进程中,信创数据库解决方案的选择至关重要。它不仅关乎企业数据的安全存储与管理,更影响着企业业务的稳定运行与未来发展。合适的信创数据库能够助力企业在复杂多变的市场环境中提升竞争力,保障数据主权与安全。然而,面对市场上众多的信创数据库产品和解决方案,企业往往感到困惑,不知如何做出正确的选择。接下来,我们将...
信创电脑   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用