These points are taken directly from the Subversion project web site.
Subversion is meant to be a better CVS, so it has most of CVS's features. Generally, Subversion's interface to a particular feature is similar to CVS's, except where there's a compelling reason to do otherwise.
Lack of these features is one of the most common complaints against CVS. Subversion versions not only file contents and file existence, but also directories, copies, and renames. It also allows arbitrary metadata ("properties") to be versioned along with any file or directory, and provides a mechanism for versioning the `execute' permission flag on files.
No part of a commit takes effect until the entire commit has succeeded. Revision numbers are per-commit, not per-file; log messages are attached to the revision, not stored redundantly as in CVS.
Subversion can use the HTTP-based WebDAV/DeltaV protocol for network communications, and the Apache web hosting server to provide repository-side network service. This gives Subversion an advantage over CVS in interoperability, and provides various key features for free: authentication, path-based authorization, wire compression, and basic repository browsing.
Subversion also offers a standalone server option using a custom protocol (not everyone wants to run Apache 2.x). The standalone server can run as an inetd service, or in daemon mode, and offers basic authentication and authorization. It can also be tunnelled over ssh.
There is no reason for these operations to be expensive, so they aren't.
Branches and tags are both implemented in terms of an underlying "copy" operation. A copy takes up a small, constant amount of space. Any copy is a tag; and if you start committing on a copy, then it's a branch as well. (This does away with CVS's "branch-point tagging", by removing the distinction that made branch-point tags necessary in the first place.)
Subversion is designed to be client/server from the beginning; thus avoiding some of the maintenance problems which have plagued CVS. The code is structured as a set of modules with well-defined interfaces, designed to be called by other applications.
The network protocol uses bandwidth efficiently by transmitting diffs in both directions whenever possible (CVS sends diffs from server to client, but not client to server).
In general, the time required for an Subversion operation is proportional to the size of the changes resulting from that operation, not to the absolute size of the project in which the changes are taking place. This is a property of the Subversion repository model.
Subversion is equally efficient on binary as on text files, because it uses a binary diffing algorithm to transmit and store successive revisions.
As of release 1.1.0, Subversion can version symbolic links. On client platforms that support symlinks (such as Unix filesystems), a versioned symlink appears as a true symbolic link. On platforms that do not support them (such as Win32), they behave like normal files, but Subversion represents the link target in such a way that it is still editable.
All output of the Subversion command-line client is carefully designed to be both human readable and automatically parseable; scriptability is a high priority.
A path can be marked to indicate that modification of that path must be serialised. This is usually only done when that path is unmergable or very difficult to merge. Subversion communicates the need for and existence of locks and, manages locking and releasing locks on these paths. (Introduced at Subversion V1.2)
Files can be opened directly from the repository by WebDAV clients and saved back to the repository. Recent versions of Microsoft Office can use this functionality. (Introduced at Subversion V1.2)