python - 为什么函数可以改变外部的对象?

标签 python python-3.x variables object namespaces

请参阅下面的示例:

def func(arg):
    print(id(arg))
    df = pd.DataFrame(arg)
    print(id(df))
    df['b'] = [4,5,6]

a = pd.DataFrame( {'a' : [1,2,3]})

print(a, id(a))

func(a)

print(a)
   a
0  1
1  2
2  3 
681924702104
681924702104
681924718944
   a  b
0  1  4
1  2  5
2  3  6

为什么调用函数后会发生变化?我不明白,特别是因为他们有不同的 id。解决这个问题的正确步骤是什么?

最佳答案

pd.DataFrame() 采用一个参数来指定是否应复制数据。默认值为False。如果您想要副本,请将其设置为 True:

df = pd.DataFrame(arg, copy=True)

这将修复您的示例。

关于python - 为什么函数可以改变外部的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45120077/

相关文章:

python - 如何检查数据框列是否包含数值? Python 3.6

Python3 argparse set_defaults 不将字符串作为选项名称?

python - 为什么 sqrt(xt) 不能正常工作?值错误 : math domain error

php - 在析构函数中使私有(private)变量为空有什么意义?

sql - PostgreSQL 声明具有显式数据类型的变量

python - 使用 django-allauth 无法进行电子邮件身份验证

python - 使用 BeautifulSoup 和 Python 获取元标记内容属性

Python:对列表中的 x 个元素求和

ruby - 从对象访问变量名

python - 在 C 中访问基于 Python 槽的对象成员