Python 为什么函数可以改变外部的对象?
请参见下面的示例:Python 为什么函数可以改变外部的对象?,python,python-3.x,variables,object,namespaces,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
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
为什么在调用函数后会发生更改?我不明白,尤其是因为他们有不同的身份证。解决此问题的正确步骤是什么?pd.DataFrame()
接受一个参数,该参数指定是否应复制数据。默认值为False
。如果需要副本,请将其设置为True
:
df = pd.DataFrame(arg, copy=True)
这将修复您的示例。Does
df=pd.DataFrame(arg);df['b']=[4,5,6]
modifyarg
?我不熟悉这个类。不确定,但是1:您创建了一个新的数据框
对象,但它似乎修改了原始数据。或者df=a.copy()
。但是由于a和df具有不同的标识(因此根据[link](),它们是不同的对象),如何通过向df添加列“b”来更改a?