我正在尝试用Python编写以下代码的等效代码:
H = [e for e in G if condition(e)]
这是我的示例代码。基本上,我只是尝试使用getter函数(G.get)来获取G
的子集。因此,我认为我希望arr2
是一个新数组,但包含相同的对象。
package main
import "fmt"
type Object struct {
x int
}
type Group []Object
func (G *Group) get() (H []Object) {
for _,v := range *G {
H = append(H,v)
}
return
}
func main() {
arr := make(Group,1)
arr[0].x = 1
fmt.Println(arr)
arr2 := arr.get()
arr[0].x = 3
fmt.Println(arr)
fmt.Println(arr2)
}
这段代码可以编译、运行并输出结果。
[{1}]
[{3}]
[{1}]
我的问题是为什么 `arr2` 不包含与 `arr` 相同的对象实例?我相信我理解了 `make` 只实例化了一个 `Group` 实例,这意味着它包含一个 `Object`。但是循环不应该创建一个新的 `Object` 吗?
感谢您的帮助!
:=
复制值的知识非常好。此外,您是否知道有更好的方法可以执行[e for e in G if condition(e)]
吗? - Travis