在python中,使用下面的代码,
x = 3
x='str'
Run Code Online (Sandbox Code Playgroud)
允许x首先指向int类型对象然后str键入object,因为python是动态类型的.type(x)给出值(3或str)的类型,但不给出名称的类型x.
事实上,x不存储值3而是指向值为的int类型对象3
在GO语言中,使用以下语法,
func main() {
y := 2
fmt.Println(reflect.TypeOf(y)) // gives 'int'
y = "str" // Compile time error, because GO is static typed
}
Run Code Online (Sandbox Code Playgroud)
题:
是int,名称y的类型或值的类型2?
Python变量绑定到在程序过程中动态分配给它们的类的实例.因此,特别是对于可变对象,它们仅仅是包含有关其数据位置和它们指向的数据类型的信息的指针.这就是为什么,在分配新值时,您正在创建一个新实例(这是您的主要兴趣)并将变量名称绑定到它,因此类型与值相关,而不是变量本身.
>>> x = 3; id(x)
1996006560
>>> x = 'str'; id(x)
1732654458784
Run Code Online (Sandbox Code Playgroud)
另一方面,Go变量作为要塞内存位置服务(当不是指针时),因为语言被编译并且变量获得一个恒定的"作业"以保持某种类型的信息(也可以是指针).因此,变量几乎肯定会在程序中保持其内存,具有常量数据类型属性,并且,您可以说变量本身属于某种类型(而不是半指针类型).
package main
import . "fmt"
func main () {
x := "str"; Println(&x) // 0xc04203a1c0
x = "Hello world!"; Println(&x) // 0xc04203a1c0
}
Run Code Online (Sandbox Code Playgroud)