I feel it's meant to be a part of the features that try to make Python more viable for functional programming, but when you compare it to the equivalent in Haskell, for example:
* You can't nest, like it was mentioned
((x1, y1), (x2, y2)) = makeLine ...
* You can't use aliases line@(point1@(x1, y1), point2@(x2, y2)) = makeLine ...
* You can't use it on all objects/structures/datatypes Line (Point x1 y1) (Point x2 y2) = makeLine ...
* You can't pattern match on it case nextShape of
Circle centerPoint radius -> ...
Square width height -> ...
Triangle point1 point2 point3 -> ...
* You can't use it on functions/lambdas \ Line (point1@(Point x1 y1) _) -> ...
drawLine (Line (point1@(Point x1 y1) _)) = ...
* The syntax in Python 2 doesn't support unpacking the first few elements of a list of variable length. Python 3 added support, though. x1:x2:xs = ...