您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python pandas dataframe,是按值传递还是按引用传递

python pandas dataframe,是按值传递还是按引用传递

简短的答案是,Python始终会传递值,但每个Python变量实际上都是指向某个对象的指针,因此有时看起来像是传递引用。

在Python中,每个对象都是可变的或不可更改的。例如,列表,字典,模块和熊猫数据帧是可变的,而整数,字符串和元组是不可变的。可变对象可以在内部进行更改(例如,将元素添加到列表中),但非可变对象则不能。

正如我在开始时所说的,您可以将每个Python变量都视为指向对象的指针。当您将变量传递给函数时,函数中的变量(指针)始终是传入的变量(指针)的副本。因此,如果将新内容分配给内部变量,则您所做的就是更改局部变量指向另一个对象。这不会更改(变异)变量指向的原始对象,也不会使外部变量指向新对象。此时,外部变量仍指向原始对象,但内部变量指向新对象。

如果要更改原始对象(仅适用于可变数据类型),则必须执行一些更改对象的操作, 而无需 为局部变量分配全新的值。这就是为什么letgo()letgo3()离开外部项目不变,但letgo2()会改变它。

正如@ursan指出的那样,如果letgo()使用类似这样的东西,那么它将改变(变异)df指向的原始对象,这将改变通过全局a变量看到的值:

在某些情况下,您可以完全掏空原始变量,并用新数据重新填充它,而无需实际进行直接分配,例如,这将更改v指向的原始对象,这将更改v以后使用的数据:

注意,我不是直接分配东西给x;。我正在为的整个内部范围分配内容x

如果您绝对必须创建一个全新的对象并使其在外部可见(大熊猫有时就是这种情况),则有两个选择。“干净”选项只是返回新对象,例如,

另一种选择是到达函数外部并直接更改全局变量。这将更a改为指向一个新对象,a此后引用的任何函数都将看到该新对象:

直接更改全局变量通常不是一个好主意,因为任何读取您的代码的人都将很难找出a更改的方式。(我通常将全局变量用于脚本中许多函数使用的共享参数,但我不允许它们更改那些全局变量。)

python 2022/1/1 18:39:15 有463人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶