相关疑难解决方法(0)

了解dict.copy() - 浅或深?

在阅读文档时dict.copy(),它说它是字典的浅层副本.我所遵循的书(Beazley的Python参考书)也是如此,它说:

m.copy()方法生成映射对象中包含的项的浅表副本,并将它们放在新的映射对象中.

考虑一下:

>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

所以我假设这会更新original(并添加'c':3)的值,因为我正在做一个浅拷贝.就像你为列表做的那样:

>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

这按预期工作.

由于两者都是浅拷贝,为什么dict.copy()它不能像我期望的那样工作?或者我对浅层和深层复制的理解是有缺陷的?

python

402
推荐指数
5
解决办法
22万
查看次数

从类方法创建新的类实例

我希望能够通过调用已实例化的对象上的方法来创建对象的新实例.例如,我有对象:

organism = Organism()

我希望能够调用organism.reproduce()并拥有两个类型为Organism的对象.我的方法在这一点看起来像这样:

class Organism(object):
    def reproduce():
        organism = Organism()
Run Code Online (Sandbox Code Playgroud)

并且我很确定它不起作用(我甚至不确定如何测试它.我在这篇文章中尝试了gc方法).那么我怎样才能让我的对象创建一个可以访问的副本,就像我创建的第一个对象一样organism = Organism()

python copy object

33
推荐指数
1
解决办法
3万
查看次数

在Python中复制对象实例

我想制作一个python类对象的副本,它在原始对象发生变化时不会改变.这是我简单的工作示例:

class counterObject:
    def __init__(self):
        self.Value = 0

    def incrementValue(self):
        self.Value += 1

    def printValue(self):
        print(self.Value)

A = counterObject()
A.incrementValue()
A.printValue() #Prints 1

B = A
A.incrementValue()
B.printValue() #Currently prints 2. Want to be 1
Run Code Online (Sandbox Code Playgroud)

根据我的理解,当我设置B = A时,这只意味着B指向对象A.因此,当我改变A时,它也会改变B. 是否有可能使B成为具有与A相同属性的新实例,但是当我更改A时它不会改变?在上面的例子中,当我增加A时,我希望B的值保持为1.

如果A和B是列表而不是对象,我会写B = list(A).我想我问的是类对象是否有类似的方法?

预先感谢您的帮助!

python oop

2
推荐指数
1
解决办法
6224
查看次数

在这种情况下,Python 是按引用传递还是按值传递,为什么?

以下代码是我的简单示例,对于每一步,我都会在评论中解释我在做什么,问题在最后。

import pandas as pd
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date, periods=3, freq='D')
columns = ['A','B','C']
df1 = pd.DataFrame(index=index, columns=columns)
df1 = df1.fillna(1) 

# up to here, i've just create a random df1, which looks like the follow:  
#               A   B   C
# 2020-03-24    1   1   1
# 2020-03-25    1   1   1
# 2020-03-26    1   1   1

df2 = df1     # here created a copy of df1 named as df2, it should pass by value based on my knowledge 
df1 …
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
44
查看次数

标签 统计

python ×4

copy ×1

object ×1

oop ×1