Python 是否有一个属性';s getter方法返回浅层副本

Python 是否有一个属性';s getter方法返回浅层副本,python,Python,我知道python中的函数总是返回变量的引用。我很好奇属性的getter方法是否返回深度副本,或者getter方法是否只是形式化的,并且返回引用 所有方法都返回对对象的引用,除非您明确告诉它们进行复制(请参见)。getter方法的工作原理与任何其他方法相同,这意味着它将返回引用而不是副本。但是,如果要返回副本,可以使用“复制”模块: import copy myvar = "abc" myvar2 = copy.copy(myvar) 在此代码中,更改myvar不会更改myvar2,反之亦然

我知道python中的函数总是返回变量的引用。我很好奇属性的getter方法是否返回深度副本,或者getter方法是否只是形式化的,并且返回引用

所有方法都返回对对象的引用,除非您明确告诉它们进行复制(请参见)。getter方法的工作原理与任何其他方法相同,这意味着它将返回引用而不是副本。但是,如果要返回副本,可以使用“复制”模块:

import copy

myvar = "abc"
myvar2 = copy.copy(myvar)
在此代码中,更改
myvar
不会更改
myvar2
,反之亦然。但是,如果您这样做:

myvar = "abc"
myvar2 = myvar
修改
myvar
也将修改
myvar2
,反之亦然,因为
myvar
myvar2
引用相同的对象


Python在向函数传递参数时使用调用的东西。这基本上意味着对对象的引用被传递给函数。这允许修改传递给函数的参数。

所有方法都返回对对象的引用,除非您明确告诉它们进行复制(请参阅)。getter方法的工作原理与任何其他方法相同,这意味着它将返回引用而不是副本。但是,如果要返回副本,可以使用“复制”模块:

import copy

myvar = "abc"
myvar2 = copy.copy(myvar)
在此代码中,更改
myvar
不会更改
myvar2
,反之亦然。但是,如果您这样做:

myvar = "abc"
myvar2 = myvar
修改
myvar
也将修改
myvar2
,反之亦然,因为
myvar
myvar2
引用相同的对象


Python在向函数传递参数时使用调用的东西。这基本上意味着对对象的引用被传递给函数。这允许修改传递给函数的参数。

“我知道python中的函数总是返回变量的浅拷贝”不,它们不返回。无论如何都不会复制变量,而是复制对象。Python从不隐式复制对象。创建副本的唯一时间是您通知创建副本的时间
property.\uuuuu get\uuuuu
的工作原理与该函数中的任何其他函数类似regard@RobertHarvey当然,但我认为OP在这里有一个更根本的误解。@juanpa.arrivillaga:我不确定你解释得是否正确。如果Python像大多数其他编程语言一样工作,那么在参数传递过程中总是会复制一些东西:引用或value@RobertHarvey一个
PyObject
指针通过CPython中引擎盖下面的值传递。但这既不在这里也不在那里。无论如何,有很多不同的。原则上,Python可以在不使用C语言中的值调用的情况下实现。无论如何都不会复制变量,而是复制对象。Python从不隐式复制对象。创建副本的唯一时间是您通知创建副本的时间
property.\uuuuu get\uuuuu
的工作原理与该函数中的任何其他函数类似regard@RobertHarvey当然,但我认为OP在这里有一个更根本的误解。@juanpa.arrivillaga:我不确定你解释得是否正确。如果Python像大多数其他编程语言一样工作,那么在参数传递过程中总是会复制一些东西:引用或value@RobertHarvey一个
PyObject
指针通过CPython中引擎盖下面的值传递。但这既不在这里也不在那里。无论如何,有很多不同的。原则上,Python可以在不使用C中的值调用的情况下实现。从技术上讲,副本仍然是引用。@juanpa.arrivillaga,是的,但它不是对它所复制的变量的引用。引用不是对变量的引用,而是对对象的引用。我认为你需要精确,因为OP相当混乱。@RobertHarvey你要找的术语有时被称为“任务呼叫”。整个“按值传递引用”是一个Javaism。Python是一种纯粹的OOP语言,一切都是对象。@RobertHarvey说真的,Python中没有基本类型。一切都是成熟的对象。这就是为什么你可以做
(42)。到字节(8,'大')
。无论如何,Python显然甚至没有引用调用。我能理解它是通过值调用的。副本仍然是一个引用。@juanpa.arrivillaga从技术上讲,是的,但它不是对它从中复制的变量的引用。引用不是对变量的引用,而是对对象的引用。我认为你需要精确,因为OP相当混乱。@RobertHarvey你要找的术语有时被称为“任务呼叫”。整个“按值传递引用”是一个Javaism。Python是一种纯粹的OOP语言,一切都是对象。@RobertHarvey说真的,Python中没有基本类型。一切都是成熟的对象。这就是为什么你可以做
(42)。到字节(8,'大')
。无论如何,Python显然甚至没有引用调用。我能理解,认为它有价值