append在python中的使用方法_在python中append方法是如何工作的?

对象引用

理解这一点的关键是Python使用对象引用传递变量。它们与c++等语言中的指针类似,但在关键方面有所不同。在

进行赋值时(使用赋值运算符,=):x = [1, 5]

实际上有两件事被创造出来了。首先是对象本身,它是列表[1, 5]。这个对象与第二个对象是一个独立的实体,后者是对象的(全局)对象引用。在

^{pr2}$

在python中,对象是通过对象引用传递到函数中的;它们不像c++那样是“按引用”或“按值”传递的。这意味着当x被传递到foo函数中时,会有一个新的本地对象引用。在Object(s) Object Reference(s)

[1, 5] x (global), x (local to foo)

现在在foo中,我们称之为x.append(3),它直接改变对象(由foo local x对象引用引用)本身:Object(s) Object Reference(s)

[1, 5, 3] x (global), x (local to foo)

接下来,我们做一些不同的事情。我们将本地foox对象引用(或者重新赋值,因为对象引用以前已经存在)分配给一个新列表。在Object(s) Object Reference(s)

[1, 5, 3] x (global)

[8] x (local to foo)

请注意,全局对象引用x,仍然存在!它没有受到影响。我们只将本地foox对象引用重新分配给一个新列表。在

最后,应该清楚的是,当函数返回时,我们得到了:Object(s) Object Reference(s)

[1, 5, 3] x (global)

[8] y (global), x (local to foo)

提要栏

注意,本地foox对象引用仍然存在!这是需要理解的重要行为,因为如果我们这样做:def f(a = []):

a.append(1)

return a

f()

f()

f()

我们不会得到:[1]

[1]

[1]

相反,我们将得到:[1]

[1, 1]

[1, 1, 1]

当程序第一次运行时,解释器只对语句a = []求值一次,并且该对象引用永远不会被删除(除非我们删除函数本身)。在

{{14}改为{cdf},当与指针对比

对象引用不同于指针的方式之一是赋值。如果Python使用实际的指针,那么您将期望如下行为:a = 1

b = a

b = 2

assert a == 2

但是,这个断言会产生错误。原因是b = 2不影响对象引用b“指向”的对象,它创建一个新对象(2),并将b重新分配给该对象。在

对象引用与指针不同的另一种方式是删除:a = 1

b = a

del a

assert b is None

这个断言也会产生错误。原因与上例相同;del a不影响对象引用b“指向”的对象。它只是删除对象引用a。对象引用b及其指向的对象1不受影响。在

你可能会问,“那么我该如何删除实际对象?”答案是你不能!只能删除对该对象的所有引用。一旦不再有对对象的任何引用,该对象就有资格进行垃圾回收,并将为您删除它(尽管您可以使用gc模块强制执行此操作)。这个特性被称为内存管理,它是Python的主要优点之一,也是Python首先使用对象引用的原因之一。在

易变性

另一个需要理解的主题是有两种类型的对象:可变的和不可变的。可变对象可以更改,而不可变对象不能更改。在

一个list,例如[1, 5],是可变的。另一方面是tuple或{}手,是不变的。在

append方法

现在所有这些都很清楚了,我们应该能够直观地回答“Python中append是如何工作的?”append()方法的结果是对可变列表对象本身进行操作。可以说,list是“就地”更改的。没有创建一个新的list,然后分配给foo local x。这与赋值运算符=相反,后者创建一个新对象并将该对象分配给对象引用。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值