I have a nil slice: 

```
var s1 []int // len(s1) == 0, cap(s1) == 0

```

Which I append one element to:

```
s2 := append(s1, 1) // len(s2) == 1, cap(s2) == 2

```

**Why is appending one element to a nil slice increases the capacity by 2?**

Printing the slices using `fmt.Printf` shows the following:

```
[] // s1
[1] // s2

```

I am also confused about why re-slicing `s2[0:2]` shows a zero which was not in the original slice nor appended to it:

```
[1,0] // s2[0:2]

```