To avoid duplicating a (potentially big) array in memory. Flattening a splat doesn't affect the original arguments:

```
2.1.0p0 :001 > def foo(*args); args.flatten!; end 
 => :foo 
2.1.0p0 :002 > bar = [1,[2,[3]]]
 => [1, [2, [3]]] 
2.1.0p0 :003 > foo(bar)
 => [1, 2, 3] 
2.1.0p0 :004 > bar
 => [1, [2, [3]]] 
```

I'm not sure how big of a difference `flatten!` VS `flatten` makes but if it's safe to modify in place I usually use the bang version of a method.