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

2025-02-25 09:07:00
admin
原创
20
摘要:问题描述:当我运行此脚本(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]
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1344  
  随着房地产行业的快速发展,项目管理在确保项目按时、按预算和高质量完成方面变得至关重要。2025年,房地产项目经理将面临更加复杂的项目需求和更高的管理标准。为了应对这些挑战,选择合适的管理工具显得尤为重要。本文将推荐10款在2025年备受房地产项目经理青睐的管理工具,帮助您提升项目管理效率,确保项目成功。禅道项目管理软件...
开源项目管理工具   0  
  在全球化日益深入的今天,跨国团队的合作已成为企业运营的常态。随着团队成员分布在不同国家和地区,语言和文化的多样性给项目管理带来了新的挑战。为了确保项目顺利进行,选择一款适合的多语言项目管理工具至关重要。本文将介绍2025年跨国团队必备的10款多语言项目管理工具,帮助团队高效协作,提升项目成功率。禅道项目管理软件禅道项目...
项目管理平台   0  
  随着工程管理领域的不断发展,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的重要工具。2025年,工程管理将面临更加复杂的挑战,包括跨团队协作、资源优化、数据驱动决策等。因此,选择一款适合的项目管理软件显得尤为重要。本文将为您推荐2025年最适合工程管理的10款项目管理软件,帮助您在众多选择中找到最适合...
项目管理工具   0  
  跨文化团队的项目运作日益普遍,高级项目管理师在其中扮演着至关重要的角色。有效的沟通是确保项目顺利推进、团队协作无间的关键因素。高级项目管理师需要掌握一系列独特的沟通技巧,以跨越文化差异带来的障碍,实现高效的信息传递与团队协作。理解文化差异文化差异是跨文化团队沟通中面临的首要挑战。不同国家、地区和民族有着各自独特的价值观...
项目管理包括哪些内容   1  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用